在Ubuntu 12.04中编译和链接OpenCV

8
我刚刚花了很长时间在Ubuntu 12.04中让openCV正确链接,我想分享一下我学到的东西,以使其他人受益。
现在,在Ubuntu存储库中可以获得OpenCV。
sudo apt-get install libopencv-dev

这很棒,但我认为(如果我错了请纠正)这个版本的OpenCV对库的命名规则有所不同。主要区别在于,在C++中,包含行应该如下:

#include "opencv2/opencv.hpp"

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

/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 ...)

我希望这可以帮到你。如果有人比我知道更多的信息,我很想知道这里发生了什么。
-Mike

你知道在Ubuntu上如何在Eclipse上做同样的事吗?我正在使用Ubuntu 12.04上的Eclipse 3.7版本。 - wrahool
1个回答

6

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

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

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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接