c - 无法加载共享库 : undefined symbols

标签 c linux opencv dynamic-linking undefined-symbol

我在 linux (ubuntu) 系统上有自己的带有插件(动态共享库)的程序。我的库(插件)使用 OpenCV(可能不那么重要)。

我的插件在/usr/local/lib/mysoft/。

我已经成功地编译了我的程序,即使使用了库,也成功地安装了,所以到目前为止一切似乎都正常。

当我运行我的程序时,它会根据一些配置文件加载这些库。我有几个库已成功加载,但我无法加载一个库。加载时出现错误(使用 dlopen() 打开库):

/usr/local/lib/mysoft/libMyPlugin2.so: undefined symbol: _ZN2cv6resizeERKNS_11_InputArrayERKNS_12_OutputArrayENS_5Size_IiEEddi
Segmentation fault (core dumped)
Tue Nov 20 19:11:29 CET 2012

很明显,找到作为 OpenCV 一部分的 cv::resize 有一些问题,但我不明白为什么。

我检查了以下内容:

  • OpenCV 可能已正确安装,因为其他库也使用它并且加载没有问题
  • 我的程序没有依赖项,libMyPlugin2.so 或 OpenCV 丢失(使用 ldd 检查)
  • 所有库和二进制文件的架构似乎都相同(我用 objdump -f 检查过)

有人知道我做错了什么吗?

这篇文章似乎很相关,但仍然没有帮助: Linux shared library that uses a shared library undefined symbol

最佳答案

好吧,我找到了问题,希望它能帮助别人......

问题 - 我在编译时缺少一个 OpenCV 库。所以我用“opencv_core opencv_imgproc opencv_highgui”替换了“opencv_core opencv_highgui”,一切正常。

因此,尽管我能够编译它,但缺少一个依赖项 - 我猜 OpenCV 中发生了一些变化,因为这些源代码与旧版本的 OpenCV 完美地工作(即使是构建)。

关于c - 无法加载共享库 : undefined symbols,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13479679/

相关文章:

c - 在 main() 之前、之后或内部声明函数有什么好处吗?

php - 在浏览器中执行hadoop命令

python - 傅立叶变换 2D 工件 - 我做错了什么?

python - 使用opencv,tensorflow和python进行人体检测

c++ - 如何将命令行参数传递给 c 程序

c - 稀疏 vector 的高效编码算法

linux - for 循环返回 ">"

c++ - 核心文件分析

python - 确定哪个版本的 OpenCV

c - 使用CUDA内核进行数组操作