本帖最后由 Jackers679 于 2011-12-03 21:01:52 编辑

解决方案 »

  1.   

    同样希望知道
    看到一种说法 是用c遍了在编译过来 不过感觉c不可以 应该用c++等才行把 因为c没有类的。。
      

  2.   

    跟类没有关系,c和c++均可,有权限的话直接在控制台上执行就行了,和linux shell上运行是一样的
      

  3.   

    我知道是可以,比如可以把busybox push进去,然后执行,但是我现在想知道一种方法如何在那个上面编译c/c++程序,然后去运行?
    我希望这个c/c++程序和java分离开。
      

  4.   

    busybox也是一个可执行程序,怎么编译的busybox,同样的办法可以编译其他可执行程序,可以利用android的NDK,Android.mk中改动编译方法为 BUILD_EXECUTABLE 即可,也可以不利用,只要链接时正确就可以。
    生成的可执行文件可以通过jni去调用,手动执行或在init.rc中启动
      

  5.   

    和一般嵌入式linux C编程没有什么大区别,android使用的是bionic库对c语言的支持比较完善。
    可以不用Android.mk那一套,编译器在pribuild下,比如arm-*-gcc -o test test.c,这样编译出来的可执行文件可以直接在adb shell中使用
      

  6.   

    请问下android中ndk可以用atomic_add(),linux中的原子加函数吗?为什么我一直找不到头文件啊
      

  7.   

    参考external下面的例子,都是使用c语言编写的
    只要写好makefile就可以了,然后编译,mmm external/xxx,重新编译system.img,make snod
    然后进入adb,
    #adb shell
    #cd /system/bin
    #ls -l xxx
    #./xxx就可以执行你自己写的程序了 
      

  8.   

    atomic_add()是内核接口,你无法在应用层调用。
    如果确实需要原子操作,android的ndk中提供有其他接口可以使用
      

  9.   

    http://blog.csdn.net/luoshengyang/article/details/6571210看完这篇神贴,你就什么都会了。学会别忘给我分哟。
      

  10.   


    你好,你可以告诉我external是在哪个下面吗?NDK目录下面吗?
      

  11.   

    参照大家的建议,在Android.mk中改动编译方法为 BUILD_EXECUTABLE,我确实编译出来了第一个helloworld,我拿到我的仿真器下面去运行的时候,运行是OK的。但是我把它adb push到我的真机上时候,运行出了这样的错误:
    # ./hello
    ./hello: 1: Syntax error: word unexpected (expecting ")")
    我也不知道是什么原因。helloworld程序在仿真器和真机上运行有区别吗?对了,我想起来了,仿真器一般是基于arm架构的。我的真机是Intel的IA架构的。你们知道怎么去修改吗?是不是编译的toolchain需要改,但是我不知道怎么改。
      

  12.   

    话说,除了编译器不一样,这根普通的linux下c编程没什么差别啊
      

  13.   


    我用下面的方法去编译,但是弹出很多错误信息,你知道是为什么吗?
    cd ~/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin
    ./arm-linux-androideabi-gcc -o hello ~/workspace_c/v4l2/jni/hello.c 
    In file included from /home/liuqiangjin/workspace_c/v4l2/jni/hello.c:1:
    ./../lib/gcc/arm-linux-androideabi/4.4.3/include-fixed/stdio.h:50:23: error: sys/cdefs.h: No such file or directory
    ./../lib/gcc/arm-linux-androideabi/4.4.3/include-fixed/stdio.h:51:24: error: sys/_types.h: No such file or directory
    In file included from /home/liuqiangjin/workspace_c/v4l2/jni/hello.c:1:
    ./../lib/gcc/arm-linux-androideabi/4.4.3/include-fixed/stdio.h:163: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'extern'
    ./../lib/gcc/arm-linux-androideabi/4.4.3/include-fixed/stdio.h:232: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__BEGIN_DECLS'
    ./../lib/gcc/arm-linux-androideabi/4.4.3/include-fixed/stdio.h:382: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__BEGIN_DECLS'
    ./../lib/gcc/arm-linux-androideabi/4.4.3/include-fixed/stdio.h:393: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'static'
      

  14.   

    ./hello: 1: Syntax error: word unexpected (expecting ")")这个错误一般是因为android没有glibc库造成的,你可以用静态编译解决这个问题
      

  15.   

    后来我知道原因了。我用的是Intel ATOM架构,不是ARM架构,所以用ndk-build APP_ABI=x86编译就可以运行了。问题解决了,还是谢谢大家的支持。
      

  16.   

    楼主,我也遇到这个问题了,请教一下,如何将 ndk-build 设置成APP_ABI=x86,3Q了