java:符号查找错误:未定义的符号:_ZN2cv6String8allocateEm



当我键入时

java -Djava.library.path="path to opencv lib folder" : "path to my libJavaFileName.so" JavaFileName

我收到以下消息:

java: symbol lookup error: "path to my libJavaFileName.so": undefined symbol: _ZN2cv6String8allocateEm

undefined symbol: _ZN2cv6String8allocateEm的含义是什么?我如何修复它?

我怀疑Java JNI绑定和您的opencv版本之间存在版本不匹配。

出现未定义的符号:_ZN2cv6String8allocateEm是因为您的libJavaFileName.so包含对该符号的引用,但链接器找不到任何定义该符号的对象文件。

您可以使用程序c++filt将符号解开为可读名称:

> c++filt -n _ZN2cv6String8allocateEm
cv::String::allocate(unsigned long)

如果你查看opencv 3.1的源代码,你可以看到这个函数确实存在(它在核心模块的stl.cpp中)。

该符号未在我的机器(2.4.8版)上的opencv库中定义,但如果我从源代码构建3.1版,则在libopencv_core.so中定义。

因此,我猜这可能是你需要安装一个新版本的opencv的情况。

同样值得检查的是,它是否真的加载了你认为的共享库版本

strace -o log.txt java rest_of_your_command_line

然后,您可以查看log.txt来查看正在打开哪些共享库。尝试将此文件转为opencv,看看是否加载了正确的版本。

您的库使用符号cv::String::allocate( unsigned long )

您需要加载适当的共享对象,这些对象提供本机代码所依赖的符号。最好的方法是使用适当的-L library_name选项编译本机共享对象,使其对这些对象具有动态依赖关系。

最新更新