【问题标题】:Can't compile opencv in linux无法在linux中编译opencv
【发布时间】:2012-07-16 23:48:39
【问题描述】:

我在 linux 中尝试使用 g++ 编译 opencv 的一些示例代码时遇到了问题,但我在运行后收到此错误消息:

g++ `pkg-config --cflags --libs opencv` hello.cpp -o hello

我得到这个输出:

/tmp/ccjvVxLI.o: In function `main':
hello.cpp:(.text+0x45): undefined reference to `cvLoadImage'
hello.cpp:(.text+0x6b): undefined reference to `cvNamedWindow'
hello.cpp:(.text+0x7c): undefined reference to `cvShowImage'
hello.cpp:(.text+0x86): undefined reference to `cvWaitKey'
hello.cpp:(.text+0x90): undefined reference to `cvDestroyWindow'
collect2: ld returned 1 exit status

我在网上查看并检查了我的 OpenCV 安装,我得到了以下的正常输出:

pkg-config --cflags opencv

作为:

-I/usr/local/include/opencv -I/usr/local/include  

但是当我跑的时候:

pkg-config --libs opencv

我得到了一个看起来像这样的奇怪列表:

/usr/local/lib/libopencv_calib3d.so /usr/local/lib/libopencv_contrib.so     /usr/local/lib/libopencv_core.so /usr/local/lib/libopencv_features2d.so /usr/local/lib/libopencv_flann.so /usr/local/lib/libopencv_gpu.so /usr/local/lib/libopencv_highgui.so /usr/local/lib/libopencv_imgproc.so /usr/local/lib/libopencv_legacy.so /usr/local/lib/libopencv_ml.so /usr/local/lib/libopencv_nonfree.so /usr/local/lib/libopencv_objdetect.so /usr/local/lib/libopencv_photo.so /usr/local/lib/libopencv_stitching.so /usr/local/lib/libopencv_ts.so /usr/local/lib/libopencv_video.so /usr/local/lib/libopencv_videostab.so 

如果有帮助,我在本网站的帮助下在 ubuntu LTS 12.04 上安装了 Opencv2.4.1:http://www.samontab.com/web/2012/06/installing-opencv-2-4-1-ubuntu-12-04-lts/

【问题讨论】:

    标签: linux opencv compilation g++


    【解决方案1】:

    根据GCC manual

    在命令的哪个位置编写此选项会有所不同;这 链接器按顺序搜索和处理库和目标文件 它们是指定的。因此,‘foo.o -lz bar.o’在之后搜索库‘z’ 文件 foo.o 但在 bar.o 之前。如果 bar.o 引用了“z”中的函数, 这些函数可能无法加载。

    所以pkg-config --libs opencv 必须放在文件名的末尾,否则 gcc 将无法解析符号。

    g++ hello.cpp -o hello `pkg-config --cflags --libs opencv`
    

    【讨论】:

    • 虽然这段代码可以解决问题,但几句话的解释将使这个答案对未来的读者有价值。
    • 感谢@TheThom 指出这一点。我会确保在以后的答案中添加必要的解释。
    【解决方案2】:

    参考这个帖子:

    compiling code with OpenCV Libraries

    将这些添加为命令行参数也很有效:

    -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_objdetect

    【讨论】:

      【解决方案3】:

      试试这个:

      g++ `pkg-config --cflags opencv` -o hello hello.cpp `pkg-config --libs opencv`
      

      【讨论】:

      • 你也可以像pkg-config --cflags --libs opencv一样调用pkg-config。
      猜你喜欢
      • 1970-01-01
      • 2013-03-06
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      • 2013-12-05
      相关资源
      最近更新 更多