在Ubuntu 12.04中编译和链接OpenCV

我只花了一段时间让openCV在Ubuntu 12.04中正确链接,并认为我会分享我为了别人的利益而学到的东西。

OpenCV现在在Ubuntu存储库中可用

sudo apt-get install libopencv-dev 

这是很好的,但我相信(请纠正我,如果我错了)这个版本的opencv有一个不同的命名约定的图书馆。 主要区别在于,在c ++中include行应该读取

 #include "opencv2/opencv.hpp" 

这将使您的代码编译为对象,但不能链接。 另一个区别是静态库也已经从libcv *重命名为libopencv * 。 例如,二进制文件现在可以位于

 /usr/lib/libopencv_core.so /usr/lib/libopencv_highgui.so . . . 

要解决这个问题,我需要通过改变我的编译器命令来明确地告诉链接器关于新的库名称

 g++ main.cpp -lopencv_core -lopencv_highgui ... 

或者在CMake中

 target_link_libraries(main opencv_core opencv_highgui ...) 

我希望这有帮助。 如果有人比我更了解我想知道这里发生了什么事情。

-麦克风

就个人而言,我使用'pkg-config'来获得编译标志。

 g++ `pkg-config --cflags opencv` main.c `pkg-config --libs opencv` -o main 

主要示例:

 #include <stdio.h> #include <cv.h> int main(void) { printf("%s\r\n", CV_VERSION); printf("%u.%u.%u\r\n", CV_MAJOR_VERSION, CV_MINOR_VERSION, CV_SUBMINOR_VERSION); }