在Ubuntu 12.04中编译和链接OpenCV

Mik*_*rth 8 ubuntu gcc opencv

我只花了很长时间才能让openCV在Ubuntu 12.04中正确链接,并且我认为我会为了别人的利益分享我学到的东西.

OpenCV现在可以在Ubuntu存储库中使用

sudo apt-get install libopencv-dev
Run Code Online (Sandbox Code Playgroud)

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

#include "opencv2/opencv.hpp"
Run Code Online (Sandbox Code Playgroud)

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

/usr/lib/libopencv_core.so
/usr/lib/libopencv_highgui.so
.
.
.
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我需要通过将编译器命令更改为显式告诉链接器有关新库名的信息

g++ main.cpp -lopencv_core -lopencv_highgui ...
Run Code Online (Sandbox Code Playgroud)

或者在CMake中

target_link_libraries(main opencv_core opencv_highgui ...)
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.如果有人比我更了解,我很想知道这里发生了什么.

-麦克风

ssi*_*fod 6

就个人而言,我正在使用'pkg-config'来获取编译标志.

g++ `pkg-config --cflags opencv` main.c `pkg-config --libs opencv` -o main
Run Code Online (Sandbox Code Playgroud)

主要的例子:

#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);
}
Run Code Online (Sandbox Code Playgroud)