我有一个JNI库" lib.so"它依赖" lib2.so"。当我在lib2.so作为静态编译另一个平台时,一切都很好,但是当动态编译时,我得到一个UnsatisfiedLinkError。特别是,它说" lib.so:未定义的符号:mysymbol_name"。我已经验证了mysymbol_name位于" lib2.so"使用nm工具。我也在加载" lib2.so"之前的#14; lib.so"。
Java代码:
System.load("/pathto/lib2.so"); // no error
System.load("/pathto/lib.so"); // triggers UnsatisfiedLinkError
C ++编译阶段
g++ -c -fPIC {{{.cpp files}}} {{-I,-L directives}} --std=c++11 -Wl,-soname,lib2.so
C ++链接阶段
g++ {-L,-I directives} -o lib.so {{.o files}} -l:lib2.so
我对C / C ++的编译和链接缺乏经验,所以我不确定错误在哪里。 C ++编译和链接,这意味着将它加载到Java中存在问题吗?
更新:我检查了ldd lib.so,发现lib2.so没有链接。