g ++,ld和JNI - 链接问题

问题描述:

我有两个名为libA.a和libB.a的第三方库文件g ++,ld和JNI - 链接问题

它们是用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 

谷歌搜索这些错误并不能帮助:(

是否有人可以告诉我我在哪里出错?

注意:我在SunOS 5.10上使用g ++ 3.4.3

尝试在链接器命令中添加-lstdC++。您可能还需要--enable-auto-import。

+0

工作。谢谢 :) – JohnH 2010-12-14 22:15:42

使用clang ++。 -lstdC++没有定义_ZNSt8ios_base4InitC1Ev符号。尝试将库-lgnustl_shared添加到链接器命令中。这对我有效。