我有两个第三方库文件,名为libA.a和libB.a
它们是用g ++构建的。
现在,我需要使用JNI从java进行函数调用。
我有一个名为wrapper.cpp的JNI包装器文件,并尝试创建一个library.so文件,该文件可以加载到我的java程序中并进行函数调用。
我首先使用g ++编译了wrapper.cpp,并尝试使用ld。
链接所有目标文件这些是我使用的命令。
%g++ wrapper.cpp -I /usr/java/include/ -I /usr/java/include/solaris/ libA.a libB.a -L /lib/*.so -c
这创建了wrapper.o
%ld -L /usr/java/lib/ -L /lib/ -b wrapper.o libA.a libB.a -o wrapper.so -m
这给了我以下错误:
Undefined first referenced
symbol in file
_ZNKSsixEj wrapper.o
_ZNSt8ios_base4InitD1Ev wrapper.o
_ZNSt8ios_base4InitC1Ev wrapper.o
__gxx_personality_v0 wrapper.o
_ZNKSs4sizeEv wrapper.o
ld: fatal: Symbol referencing errors. No output written to wrapper.so
Google搜索这些错误无济于事(
有人可以告诉我哪里出错了吗?
注意:我在SunOS 5.10上使用g ++ 3.4.3
答案 0 :(得分:4)
尝试将-lstdc ++添加到链接器命令中。您可能还需要--enable-auto-import。
答案 1 :(得分:0)
使用clang ++。 -lstdc ++没有定义_ZNSt8ios_base4InitC1Ev符号。尝试将库-lgnustl_shared添加到链接器命令。这对我有用。