Java ネイティブ インターフェイスを使用しようとしています。
これらのコマンドを使用して共有ライブラリ オブジェクト .so ファイルを作成しました
ln -s /usr/local/java/jdk1.7.0_21/include /usr/include/JNILibForProj
gcc -I /usr/include/JNILibForProj -c -Wall -w -fpic CppCode.cpp
gcc -shared -o libCppCode.so CppCode.o
.so ファイルを /usr/lib に配置し、そこから他のライブラリ ファイルをロードします。
ただし、ライブラリをロードしようとすると
System.loadLibrary("CppCode");
次のようにエラーが発生します
Exception in thread "main" java.lang.UnsatisfiedLinkError: /usr/lib/libCppCode.so: /usr/lib/libCppCode.so: undefined symbol: _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
同じ場所にある他の .so ファイルは正しく読み込まれます。したがって、ファイルの場所は問題ではありません。g++ でコンパイルしようとしましたが、同じエラー メッセージが表示されます。
どんな助けでも大歓迎です!ありがとう!
編集 実際に私は CPP でいくつかの opencv コードを書いており、JNI を介してリンクしようとしています。現在、.so ファイルを作成するためにこの行を使用しています。私はg ++が苦手です。私が書いたことが正しいかどうかを確認してもらえますか???
g++ -I/usr/local/include/opencv -I/usr/local/java/jdk1.7.0_21/include -I/usr/include/JNILibForProj -L/usr/local/lib -O0 -g3 -Wall -w -c -fpic -Wl,--add-stdcall-alias -shared -o "/home/shikhar/Desktop/myLib/libCppCode.so" "../src/CppCode.cpp" -lopencv_core -lpHash -lopencv_imgproc -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_flann -lopencv_highgui -lstdc++
.so を作成して /usr/lib にコピーした後、以前のエラー メッセージは表示されなくなりましたが、
ET_DYN と ET_EXEC のみをロードできます
編集2
多くのヒットと試行の後、解決策を見つけました。私の答えを確認してください。