1

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

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 的输出不包含其所有库的绝对路径?当我不在构建行上使用“pkg-config --libs opencv”时,英特尔 ipp、pthread、m、stdc++ 等的库得到正确解析,并且应用程序构建良好,因为我还在链接行上指定了它们如:“-lpthread -lstdc++”...等。这些位于链接行上,在我指定之后:“pkg --libs opencv”

但是使用“pkg-config --libs opencv”会破坏分辨率。

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

任何帮助将不胜感激。

4

4 回答 4

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

于 2012-05-10T01:01:14.797 回答
0

我认为您的问题可能与我遇到的问题有关,以及此对 opencv的拉取请求的主题。我的猜测是:您是在 linux 机器上从源代码安装?如果你找到你的opencv.pc文件(可能在 /usr/local/lib/pkgconfig/opencv.pc),你的情况是否会改变,并-l在有问题的词之前添加(rt pthread 等)?

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

于 2013-10-14T02:28:21.620 回答
0

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

于 2013-10-31T22:16:55.357 回答
0

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

/Applications/opencv-2.4.11/build/unix-install/

因此,对我来说,有效的命令是:

pkg-config --libs /Applications/opencv-2.4.11/build/unix-install/opencv.pc 
于 2015-09-10T02:31:01.320 回答