无法加载共享库:未定义的符号

时间:2012-11-20 18:25:14

标签: 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

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

我检查了以下内容:

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

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

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

1 个答案:

答案 0 :(得分:1)

我找到了问题,希望它可以帮助别人......

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

因此,尽管我能够编译它,其中一个依赖项丢失了 - 我想OpenCV中的某些内容已经发生了变化,因为这些源代码与旧版本的OpenCV完美配合(即使使用构建版本)。