[英]Java program that access C++ shared library that uses OpenCV
我們開發了一個使用OpenCV 2.4的C ++共享庫( libAuxLinuxShared.so
)
我們還開發了一個命令行Java應用程序,可通過JNI訪問libAuxLinuxShared.so
。 此應用程序已部署在Ubuntu 14.10中
運行Java應用程序時,我們得到以下結果:
Exception in thread "main" java.lang.UnsatisfiedLinkError: /vagrant/Milan/Linux/libAuxLinuxShared.so: /vagrant/Milan/Linux/libAuxLinuxShared.so: undefined symbol: _ZTVN2cv12_OutputArrayE
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at com.mi.pixme.PixmeJavaAPI.<clinit>(PixmeJavaAPI.java:8)
at com.mi.pixme.PixmeCommandRunner.main(PixmeCommandRunner.java:11)
在我看來,制作libAuxLinuxShared.so
時OpenCV沒有正確鏈接,或者找不到OpenCV共享庫。 我不是C ++專家,當然不是Linux下的專家,我不確定下一步該怎么做。
我試圖通過兩種方式做到這一點:
將OpenCV設為共享庫
將OpenCV設為靜態庫,並嘗試將libAuxLinuxShared.so
與它們鏈接(使用-l)。 我在Makefile中使用pkg-config --libs --cflags opencv
來獲取庫的完整列表。
在兩種情況下,我都得到相同的結果。
注意以下結果可能會有所幫助:
$ nm -D libAuxLinuxShared.so | grep _ZTVN2cv12_OutputArrayE
是:
U _ZTVN2cv12_OutputArrayE
即使我嘗試進行OpenCV的靜態鏈接。 該符號可能在opencv_core
庫中定義:
$ nm /usr/local/lib/libopencv_core.so | grep _ZTVN2cv12_OutputArrayE
00000000004b1de0 V _ZTVN2cv12_OutputArrayE
我還嘗試設置LD_LIBRARY_PATH=/usr/local/lib:/usr/local/share/OpenCV/3rdparty/lib
(這是OpenCV庫所在的位置),但是結果是相同的。 我嘗試的最后一件事是從Java應用程序加載opencv_core
共享庫(我認為_ZTVN2cv12_OutputArrayE
所在的庫):
添加到Java主類:
System.loadLibrary(“ opencv_core”);
然后將/usr/local/lib
到Java命令的庫路徑,如下所示:
-Djava.library.path = / usr / local / lib:
但是,同樣的結果。 我可以看到Java程序找到了該庫,因為如果我將opencv_core
更改為一個不存在的名稱, opencv_core
收到另一個錯誤(找不到該庫)。 但是,當庫名正確時,它對結果沒有影響,這是抱怨_ZTVN2cv12_OutputArrayE未定義的例外。
編輯:以下要點包含我用於構建共享庫的makefile: https : //gist.github.com/yanivby/69984a541e97e33d815a76a9bbf4d712
根據您的要點中的Makefiles,問題似乎是在實際依賴那些庫的對象之前提到了pkg-config --libs --cflags opencv
,它向鏈接器添加了一堆-l library
參數。 。 在您的Makefile中,最簡單的解決方法是將$(INCLUDES)
引用移至命令的末尾$(LIBS)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.