我正在开发一个加载两个共享库的 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
至
arm-linux-androideabi-gcc src/libpcan.c -fPIC -shared -O2 -Wall -lc -I. -I../driver -DNO_RT -o -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'...
我的接收测试正在使用该函数,但由于它在 libpcan.so 中声明并且我还加载了该库,所以我不知道该错误可能来自哪里。我只是猜测这是我的 cags 中的一个错误,因为我是通过在 shell 中使用 gcc 来构建 .so 文件的新手,我并不真正了解我使用的所有标志。