繁体   English   中英

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

[英]java: symbol lookup error: undefined symbol: _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的含义是什么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选项对这些对象具有动态依赖关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM