android ndk编译,方法找不到,collect2: ld returned 1 exit status
这两天用NDK编译SO库,总是报这个错:/0/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armea
这两天用NDK编译SO库,总是报这个错:
/0/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/u_hw_api/u_hw_api.o: in function card_close:jni/u_hw_api.c:391: error: undefined reference to 'Reader_close
仔细看了一下代码,发现该做的步骤都做了,
1. 对需要调用的so库进行预编译
2. 引用头文件
3. 在MK中加入该库的动态链接
但是,尽管上面的操作做了,用NDK编译,就出现找不到方法,折腾了一天,发现,这个代码需要同时调用4个SO库,但是其它的so库没有问题。
最后,仔细排查,发现头文件之间存在差异。因为报错的so,是C++代码编译而成的,而该头文件没有加
#ifdef __cplusplus
extern "C" {
#endif
。。。。。。
#ifdef __cplusplus
}
所造成ndk在编译LD的时候,无法连接到SO库的方法,从而报错。
补充: 若加了上面代码还不行,可以暂时把C++的源码,改为C代码,重新编译so库。网上贴吧也有人说,可能是NDK的版本有buf,可以选用较新的编译试试。
更多推荐
所有评论(0)