JavaとJNIでMatlabを使用すると、理解できないUnsatisfiedLinkErrorが発生します。
まず、Matlabコマンドラインからネイティブライブラリをロードします。できます:
>> java.lang.System.load('/usr/local/share/OpenCV/java/libopencv_java.so')
次に、ネイティブライブラリで実装されたJava関数を呼び出します。
>> org.opencv.core.Mat
Java exception occurred:
java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat()J
at org.opencv.core.Mat.n_Mat(Native Method)
at org.opencv.core.Mat.<init>(Mat.java:441)
org.opencv.core.Mat.n_Mat()Jが見つからないと文句を言っていますが、その記号は.soにあります。
echristiansen@jnu:/usr/local/share/OpenCV/java$ nm libopencv_java.so | grep Mat_n_1Mat
0000000000027780 T Java_org_opencv_core_Mat_n_1Mat__
00000000000316c0 T Java_org_opencv_core_Mat_n_1Mat__DDI
00000000000312a0 T Java_org_opencv_core_Mat_n_1Mat__DDIDDDD
00000000000318a0 T Java_org_opencv_core_Mat_n_1Mat__III
00000000000314b0 T Java_org_opencv_core_Mat_n_1Mat__IIIDDDD
0000000000030fa0 T Java_org_opencv_core_Mat_n_1Mat__JII
0000000000031120 T Java_org_opencv_core_Mat_n_1Mat__JIIII
それで、正しいシンボルでネイティブライブラリをロードしている場合、なぜUnsatisifiedLinkErrorが発生するのですか?