[英]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.