2010-12-10 14 views
2

、私は彼らがグラム++で構築されlibA.aとlibB.aグラム++、LDとJNI - リンクする問題

と呼ばれる2つのサードパーティのライブラリファイルを持っています。

今、私はJNIを使​​ってjavaから関数呼び出しを行う必要があります。

私はwrapper.cppというJNIラッパーファイルを持っていて、私のJavaプログラムにロードして関数呼び出しを行うことができるlibrary.soファイルを作成しようとしました。

私はまずg ++を使ってwrapper.cppをコンパイルし、ldを使ってすべてのオブジェクトファイルをリンクしようとしました。

これは私が使用したコマンドです。

%ld -L /usr/java/lib/ -L /lib/ -b wrapper.o libA.a libB.a -o wrapper.so -m 

wrapper.oこれは、作成した

%g++ wrapper.cpp -I /usr/java/include/ -I /usr/java/include/solaris/ libA.a libB.a -L /lib/*.so -c 

は、これは私に次のエラーを与える:これらのエラーをグーグルで

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を使用しています

答えて

4

リンカコマンドに-lstdC++を追加してみてください。 --enable-auto-importが必要な場合もあります。

+0

Worked。ありがとう:) – JohnH

0

clang ++を使用する。 -lstdC++に_ZNSt8ios_base4InitC1Evシンボルが定義されていません。リンカコマンドに-lgnustl_sharedライブラリを追加してみてください。それは私のために働いた。