我已成功构建并安装了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目录中的所有符号链接,但这并没有解决这个问题。
非常感谢任何帮助。
答案 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命令或类似命令验证它。