Gcc Android NDK无法加载库:reloc_库[1306]

Gcc Android NDK无法加载库:reloc_库[1306],gcc,android-ndk,shared-libraries,Gcc,Android Ndk,Shared Libraries,我正在开发一个android应用程序,加载两个共享库。一个是外部的,称为libpcan.so。通常它的构建版本是libpcan.so.0.6,我的android无法使用它,因此我更改了编译它的gcc标志: arm-linux-androideabi-gcc src/libpcan.c -fPIC -shared -O2 -Wall -Wl,-soname,-libpcan.so.0 -lc -I. -I../driver -DNO_RT -o -libpcan.so.0.6 ln -sf lib

我正在开发一个android应用程序,加载两个共享库。一个是外部的,称为libpcan.so。通常它的构建版本是libpcan.so.0.6,我的android无法使用它,因此我更改了编译它的gcc标志:

arm-linux-androideabi-gcc src/libpcan.c -fPIC -shared -O2 -Wall -Wl,-soname,-libpcan.so.0 -lc -I. -I../driver -DNO_RT -o -libpcan.so.0.6
ln -sf libpcan.so.0.6 libpcan.so

这个.so与so.0.6的大小相同,所以我认为它工作正常

我自己的c代码正在使用

arm-linux-androideabi -shared src/receivetest.c src/common.c -I. -I../lib -I../driver -L../lib -L/lib -L/usr/lib -L/usr/local/lib -o libreceivetest.so
我将这两个文件以及libpcan.so和libreceivetest.so加载到我的应用程序中

    static {
    System.loadLibrary("pcan");
    System.loadLibrary("receivetest");
    }
当我尝试启动该应用程序时,会收到错误消息:

 07-14 11:12:43.812: E/AndroidRuntime(753): java.lang.ExceptionInInitializerError
 07-14 11:12:43.812: E/AndroidRuntime(753): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1306]:    36 cannot locate 'CAN_Open'...
我的receivetest正在使用该函数,但由于它在libpcan.so中声明,并且我也在加载该库,我不知道该错误可能来自何处。
我猜这是我的clags中的一个错误,因为我刚开始构建。因此,通过在shell中使用gcc,我并不真正理解我使用的所有标志。

我已经很久没有解决这个问题了。但我从未将这个问题标记为已解决。 感谢jww提醒我


正如我在对我的问题的评论中所说,由于编译.so文件时缺少参数,因此缺少指向函数CAN_Open的链接。函数CAN\u Open是libpcan.so的一部分,通过跳过指向该文件的链接,CAN\u Open函数从未进入receivetest.so。

解决了这个问题。我在编译receivetest.so时忘记了-lpcan标志。所以没有libpcan的链接,所以reloc_库并没有什么特别之处。函数“CAN_Open”。。。是什么给你提供了线索。
 07-14 11:12:43.812: E/AndroidRuntime(753): java.lang.ExceptionInInitializerError
 07-14 11:12:43.812: E/AndroidRuntime(753): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1306]:    36 cannot locate 'CAN_Open'...