关于libs,pkg-config和opencv的基本构建问题

时间:2012-05-10 00:46:34

标签: 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 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的输出不包括所有libs的绝对路径?当我不在构建线上使用“pkg-config --libs opencv”时,intel ipp,pthread,m,stdc ++等的库得到正确解析,应用程序构建正常,因为我也在链接行上指定了它们as:“ - lpthread -lstdc ++”......等。这些在我指定的链接行上定位:“pkg --libs opencv”

但是使用“pkg-config --libs opencv”搞砸了分辨率。

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

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

如果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标头和库放在不同的目录中。

答案 1 :(得分:0)

我认为你的问题可能与我所拥有的问题有关,而且这个pull request的主题与opencv有关。我的猜测是:你是在Linux机器上从源码安装的?如果您找到opencv.pc文件(可能位于/usr/local/lib/pkgconfig/opencv.pc),并且在那里有令人讨厌的单词之前添加-l(rt pthread等),您的情况是否会发生变化?< / p>

注意:从源代码安装会产生一个新的(坏的)opencv.pc,它会覆盖你建议进行更改的那个,所以如果你经历了更多的重建 - 安装周期,请记得去修复opencv在尝试重建程序之前再次.pc。

答案 2 :(得分:0)

这通常是在我的实践中 - 由新的CMake或行为不端的人引起的:)解决起来非常简单 - 手动编辑opencv.pc并在名称中添加缺少的“-l”前缀。而已!此修复后所有其他问题都消失了。第二个常见问题是PKG_CONFIG_PATH本身 - 将它添加到shell GLOBAL(!!)配置文件脚本中并重新启动shell并通过printenv命令或类似命令验证它。