OpenCV 3.1 升级会导致 Linux 上的链接器错误

OpenCV 3.1 Upgrade Leads to Linker Errors on Linux

本文关键字:Linux 链接 错误 OpenCV      更新时间:2023-10-16

我最近按照本指南从OpenCV 2.4.11升级到OpenCV 3.1。这个sudo make安装似乎已经成功运行,当我运行pkg-config --modversion opencv时,我得到了适当的版本(3.1.0)。

但是由于某种原因,我现在遇到了链接器错误,即使是简单的程序也无法编译,例如:

#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char* argv[])
{
   Mat im1 = imread(argv[1]);
   return 0;
}

返回错误:

main.cpp:-1: error: undefined reference of cv::imread(cv::String const&, int)

main.cpp:-1:错误:未定义对"cv::String::allocate(unsigned long)"的引用

main.cpp:-1: 错误: 未定义对 'cv::String::d eallocate()' 的引用

:-1:错误:

收集 2:错误:ld 返回 1 退出状态

这可能是由于与以前的安装冲突吗?在我开始手动删除/usr/local/[lib | include | bin] 中的文件之前,我想我会先在这里问。有什么建议吗?

您的链接器路径可能是错误的。确保所需的 opencv 是链接器路径上的第一个,否则它可能链接到错误的链接。删除opencv2可能会解决问题...考虑将来使用包管理器,这样您就不会一直遇到这样的混乱。

我继续采用核选项(sudo rm 后跟 sudo make install),现在一切都编译了。我并不为此感到骄傲,也不一定提倡它,但如果其他人达到绝望的地步,你可能会发现这个杀戮日志很有帮助:

sudo rm -r /usr/share/opencv
sudo rm -r /usr/share/OpenCV/
sudo rm -r /usr/local/include/opencv
sudo rm -r /usr/local/bin/opencv*
sudo rm -r /usr/local/share/OpenCV/
sudo rm -r /usr/local/lib/libopencv_*
sudo rm    /usr/local/lib/pkgconfig/opencv.pc
sudo rm    /usr/local/lib/python2.7/dist-packages/cv2.so