Linux 关于libs、pkg config和opencv的基本构建问题

Linux 关于libs、pkg config和opencv的基本构建问题,linux,opencv,g++,Linux,Opencv,G++,我已经成功地构建并安装了opencv库。现在我正试图在我的应用程序中使用这些lib,但我不断收到链接错误。我正在使用: pkg-config --libs opencv 当我在命令行上运行它时,我可以看到输出。它列出了许多库,但并不是所有库都以指定的绝对路径列出。例如,以下是部分输出: libippcc_l.a libippvm_l.a tbb rt pthread m dl /usr/lib/libXext.s stdc++ g++: libipps_l.a: No such file o

我已经成功地构建并安装了opencv库。现在我正试图在我的应用程序中使用这些lib,但我不断收到链接错误。我正在使用:

pkg-config --libs opencv
当我在命令行上运行它时,我可以看到输出。它列出了许多库,但并不是所有库都以指定的绝对路径列出。例如,以下是部分输出:

libippcc_l.a libippvm_l.a tbb rt pthread m dl /usr/lib/libXext.s stdc++
g++: libipps_l.a: No such file or directory
g++: libippi_l.a: No such file or directory
g++: libippcv_l.a: No such file or directory
g++: libippcc_l.a: No such file or directory
g++: libippvm_l.a: No such file or directory
g++: tbb: No such file or directory
g++: rt: No such file or directory
g++: pthread: No such file or directory
g++: m: No such file or directory
g++: dl: No such file or directory
g++: stdc++: No such file or directory
当我构建我的应用程序时,会出现链接错误。以下是部分输出:

libippcc_l.a libippvm_l.a tbb rt pthread m dl /usr/lib/libXext.s stdc++
g++: libipps_l.a: No such file or directory
g++: libippi_l.a: No such file or directory
g++: libippcv_l.a: No such file or directory
g++: libippcc_l.a: No such file or directory
g++: libippvm_l.a: No such file or directory
g++: tbb: No such file or directory
g++: rt: No such file or directory
g++: pthread: No such file or directory
g++: m: No such file or directory
g++: dl: No such file or directory
g++: stdc++: No such file or directory
链接器似乎无法解析不包含看似合理的绝对路径的库。但我的困惑是,为什么pkg config的输出不包括其所有lib的绝对路径?当我在生成行中不使用“pkg config--libs opencv”时,英特尔ipp、pthread、m、stdc++等的库将得到正确解析,应用程序生成良好,因为我还在链接行中将它们指定为:“-lpthread-lstdc++”。。。等等。它们位于链接行上,在我指定的“pkg--libs opencv”之后

但是使用“pkg-config--libs-opencv”会破坏解析

我已经从命令行运行了“ldconfig”来更新我的libs目录中的所有符号链接,但这并没有解决这个问题

任何帮助都将不胜感激。

如果
pkg config--libs opencv
正在输出,那么您就有问题了。可能是以前安装的OpenCV破坏了它,或者可能是您使用的版本不够新,或者可能是未成功编译,或者可能是存储库中的最新版本存在问题

无论如何,我在Mac OS X上使用OpenCV 2.3.1,并且
pkg config--libs OpenCV
输出以下信息:

-L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann 
您可以尝试手动编译您的应用程序,以查看是否还有其他问题:

g++ test.cpp -o test -I/usr/local/include/opencv -I/usr/local/include  -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann

请注意,您的安装可能已将OpenCV头和库放在不同的目录中。

我认为您的问题可能与我的问题有关,而问题的主题是OpenCV。我的猜测是:您是从linux机器上的源代码安装的吗?如果您找到您的
opencv.pc
文件(可能位于/usr/local/lib/pkgconfig/opencv.pc),并在有问题的单词前面添加
-l
(rt-pthread等),您的情况会发生变化吗


注意:从源代码安装将生成一个新的(坏的)opencv.pc,它将覆盖我建议的更改所在的opencv.pc,因此如果您经历更多的重建安装周期,在尝试重建您的程序之前,请记住再次修复opencv.pc。

这通常是由新的CMake或行为不端的CMake造成的:)解决起来非常简单-手动编辑opencv.pc并在名称中添加缺少的“-l”前缀。就这样!此修复后,所有其他问题都将消失。第二个常见的问题是PKG_CONFIG_路径本身-将其添加到shell全局(!!)配置文件脚本中,然后重新启动shell,并通过printenv命令或类似命令对其进行验证。

您可以尝试搜索“opencv.pc”以查找路径。对我来说,包裹在里面

/Applications/opencv-2.4.11/build/unix-install/
因此,对我来说,有效的命令是:

pkg-config --libs /Applications/opencv-2.4.11/build/unix-install/opencv.pc 

我很想改变标题。。。但是我不会的。关于标题我很抱歉。我是新来的,正在学习什么是正确的行为。当构建问题阻碍进度时,我只是感到有些沮丧。谢谢你的帮助。我将回到第一步,重建opencv。只要知道pkg config应该在库名称前面输出'l',就会有所帮助。因此,在继续之前,我可以先解决低级问题。您可能想看看。