Ubuntu的,OpenCV的和链接(Ubuntu, opencv and linking)

2019-06-24 02:58发布

我前几天安装了Ubuntu,并使用apt-get的安装build_essentials,OpenCV的,highgui等G ++是4.6.1,OpenCV的似乎是2.1.0 ..我没有从源代码编译的OpenCV ..

我们有一个使用了OpenCV功能的一些软件。 让我们假设文件被命名为a.cpp和b.cpp源。 我编译为A0和B0,然后把这些成.so库(libab.so称呼它)。

最后,还有在其与主文件(称之为z.cpp)。 我试图从它建立一个可执行文件,但我得到的简历::东西一吨的“未定义的引用”错误。 我的链接线看起来是这样的:

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

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

有趣的是,如果我直接用我的.o文件链接,它建立就好了。 所以这:

g++ -fPIC -g z.cpp a.o b.o -lml -lcvaux -lhighgui -lcv -lcxcore -o z.out

作品。

我读过的一切似乎都在暗示这可能是一个链接行排序的问题,但我已经尝试了所有排序排列,并得到了同样的问题,所以我真的不认为它我的问题,但我仍然是错的。 任何人有任何想法如何,我能得到这个建立与我的图书馆,为什么,如果我构建具有一套完整的在库成功.o文件的,将采取不同的,但不能与库本身建立?

Answer 1:

您可以通过以下标志G ++:

`pkg-config --libs opencv`

例如:

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

pkg配置给编译器关于您库中的信息。

你可以看一下:

/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}


Answer 2:

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

我通常与核心模块连接第一,因为为了此事做,然后按照字母顺序(可以肯定的是我不会忘记一个模块)。

-编辑-

你尝试把 - 色OpenCV的库后? 这可能做的伎俩,因为库在命令行中的顺序链接。



文章来源: Ubuntu, opencv and linking