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

OpenCV 3.1 Upgrade Leads to Linker Errors on Linux

我最近通过关注 this guide 从 OpenCV 2.4.11 升级到 OpenCV 3.1。这个 sudo make install 似乎已经成功运行,当我 运行 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;
}

returns 错误:

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

main.cpp:-1: error: undefined reference to `cv::String::allocate(unsigned long)'

main.cpp:-1: error: undefined reference to `cv::String::deallocate()'

:-1: error: collect2: error: ld returned 1 exit status

会不会是和之前的安装冲突了?在我开始手动删除 /usr/local/ [lib | 中的文件之前包括 | bin],我想我会先在这里问。有什么建议吗?

您的 linker 路径可能有误。确保你想要的 opencv 是你 linker 路径上的第一个,否则它可能 link 反对错误的。删除 opencv2 可能会解决问题...考虑在将来使用包管理器,这样您就不会一直面对这样的混乱。

我继续并选择了核选项(sudo rm 后跟 sudo make install),现在一切都可以编译了。我并不以此为荣,也不一定提倡它,但如果其他人达到这种绝望的地步,你可能会发现这个 kill log 有帮助:

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