使用带有Java JNI接口

时间:2017-02-13 01:46:22

标签: java c++ java-native-interface g++ ld

我有一个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没有链接。

0 个答案:

没有答案