Ububtu,opencv和链接

我前几天安装了Ubuntu,并使用apt-get来安装build_essentials,opencv,highgui等。g ++是4.6.1,opencv似乎是2.1.0 ..我没有从源代码构buildopencv ..

我们有一些使用opencvfunction的软件。 假设源文件被命名为a.cpp和b.cpp。 我编译成ao和bo,然后把它们放到一个.so库中(称之为libab.so)。

最后,有一个主要的文件(称之为z.cpp)。 我尝试从它build立一个可执行文件,但是我得到了很多cv :: stuff的“未定义参考”错误。 我的链接线看起来像这样:

g++ -fPIC -g z.cpp -L../lib -lab -lml -lcvaux -lhighgui -lcv -lcxcore -o z.out 

然后我得到未定义的引用错误(所有这些都是cv ::东西)。

有趣的部分是,如果我直接链接到我的.o文件,它build立得很好。 所以这:

 g++ -fPIC -g z.cpp ao bo -lml -lcvaux -lhighgui -lcv -lcxcore -o z.out 

作品。

我所读过的所有东西似乎意味着这可能是一个链接sorting的问题,但是我尝试了所有的排列顺序,并得到同样的问题,所以我真的不认为它是我的问题,但我仍然可能是错的。 任何人有任何想法如何我可以得到这与我的图书馆build设,以及为什么它会采取不同的行为,如果我成功地build立了一套完整的.o文件,但不能build立与图书馆本身?

你可以把下面的标志传给g ++:

 `pkg-config --libs opencv` 

例如:

 g++ myprogram.cpp `pkg-config --libs opencv` -o myprogram 

pkg-config向编译器提供关于库的信息给你。

你可以看看:

/usr/local/lib/pkgconfig/opencv.pc

该文件包含编译的所有相关信息:

 prefix=/usr/local exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir_old=${prefix}/include/opencv includedir_new=${prefix}/include Name: OpenCV Description: Open Source Computer Vision Library Version: 2.3.1 Libs: -L${libdir} -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann Cflags: -I${includedir_old} -I${includedir_new} 

在我看来,你正在与旧的C库链接。 今天的OpenCV链接命令更像是: -lopencv_core -lopencv_flann -lopencv_highgui...

我通常首先与核心模块链接,因为顺序确实重要,然后按照字母顺序(确保我不会忘记一个模块)。

– 编辑 –

你有没有试图把-lab之后的opencv库? 这可能会诀窍,因为库是按照命令行的顺序链接的。