ndk错误总结

来源:互联网 发布:成都IT 知乎 编辑:程序博客网 时间:2024/05/14 20:55

1.   ndk Unresolved inclusion: <jni.h>或者Type 'jint' could not be resolved

  选中工程,右键->Properties,点击C/C++ General展开,点击 Path and Symbols,在右边Includes下,点击Add,把NDK文件夹下的jni头文件和相应的C++头文件添加进来。一定要填写完整的路径,比如我添加的两个路径分别是:

      E:\AndroidNDK\android-ndk-r10c\toolchains\mipsel-linux-android-4.8\prebuilt\windows-x86_64\lib\gcc\mipsel-linux-android\4.8\include

       E:\AndroidNDK\android-ndk-r10c\platforms\android-19\arch-arm\usr\include


点击ok,解决

2.make: *** No rule to make target `c:/user/android/jni/hello.c', neede

d by`c:/user/android/obj/local/armeabi/hello/hello.o'.  Stop.

   错误原因:工程目录改变或者修改了文件名,类名,导致重新编译的时候文件找不到

    解决方法:找到相应的工程目录下,删除obj文件夹,然后重新编译。

3.ndk-build 编译多个CPU架构的动态链接库

   如果有或创建Application.mk文件,则在该文件添加如下内容:

      APP_ABI := armeabi armeabi-v7a x86
    如果没有或不想使用Application.mk文件,则在ndk-build参数中添加
    APP_ABI="armeabi armeabi-v7a x86 mips"
    然后直接运行:

   ndk-build APP_ABI="armeabi armeabi-v7a x86 mips"

这个是生成所有的库,如果你单纯的只需要某一个,例如x86,可以直接执行ndk-build APP_ABI="x86"即可

4. java.lang.UnsatisfiedLinkError: Native method not found

    错误1:方法写的有错误,Java_com_example_helloword2_MainActivity_add严格按照所要求的检查是否方法或参数有错误

或者大小写有误或者Java中没有写加载类的方法System.loadLibrary("hello");

    错误2:添加extern "C" {方法体}

    错误3:生成的so库不对应,比如你的机器cpu是armeabi-v7a,你生成的是armeabi,所以出错,解决办法,见上面第3条.

5. java.lang.UnsatisfiedLinkError: couldn't load hello:**findLibrary returned null **

  错误1:生成的so库不对应,比如你的机器cpu是armeabi-v7a,你生成的是armeabi,所以出错,解决办法,见上面第3条.

  错误2:System.loadLibrary("hello"); hello写错,库名写的不对

6.生成本地方法cd到src目录下,执行命令javah -jni com.example.aa.MainActivity(主类名)

7.编译生成so库,cd到项目目录下,ndk-build,如果ndk环境变量没有配置成功,可直接输入你下载的ndk全路径,如android-ndk-r9d/ndk-build

8.*** multiple target patterns.  Stop 

解决:将obj/目录删除,再重新编译即可

0 0