我已经成功建造并安装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配置的输出包括其所有库的绝对路径? 当我不使用“pkg配置--libs OpenCV的”关于构建线,对于英特尔IPP,并行线程,男,STDC ++等库得到妥善解决,因为我也有他们的链接行中指定的应用程序建立优良如:“-lpthread -lstdc ++” ......等等,这些都是定位在连接线的我后指定:“PKG --libs的OpenCV”
但使用“pkg配置--libs OpenCV的”螺丝钉起来的分辨率。
我从命令行中运行“ldconfig命令”更新所有的符号链接在我的库目录,但这并没有解决这个问题。
任何帮助将不胜感激。
如果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并行线程等)之前?
注:从源代码安装将作出新的(坏)opencv.pc覆写,你做我的建议的变更中的一个,所以如果你经历更多的重建安装周期,千万记得要再去修复了opencv.pc之前,试图重建程序。
这导致 - 通常是在我的实践 - 通过新的CMake或行为不端的一个:)这是很简单的解决 - 手工opencv.pc编辑和添加缺少的“-l”前缀的名字。 而已! 所有其他问题此修复程序后消失。 第二正常麻烦是PKG_CONFIG_PATH本身 - 它加入你的壳牌全球(!!)profile脚本并重新启动外壳,并通过printenv命令或类似的东西验证。
您可以尝试搜索“opencv.pc”寻找路径。 对我来说,包装是
/Applications/opencv-2.4.11/build/unix-install/
因此,对于我工作的命令是:
pkg-config --libs /Applications/opencv-2.4.11/build/unix-install/opencv.pc