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。
答
使用clang ++。 -lstdC++没有定义_ZNSt8ios_base4InitC1Ev符号。尝试将库-lgnustl_shared添加到链接器命令中。这对我有效。
工作。谢谢 :) – JohnH 2010-12-14 22:15:42