无法链接到 OpenCV (Linux) 的共享库
Posted
技术标签:
【中文标题】无法链接到 OpenCV (Linux) 的共享库【英文标题】:Not able to link to shared library of OpenCV (Linux) 【发布时间】:2012-04-16 21:25:02 【问题描述】:下面写的问题已解决,但我面临一个新的相关问题。 与之前略有不同,我将示例 OpenCV 代码编译链接为:
g++ facedetect.cpp -o facedetection -I /home/harsh/Downloads/OpenCV-2.0.0/include/opencv/ -L/home/harsh/Downloads/OpenCV-2.0.0/lib/ -lcv -lcxcore -lcvaux -lml -lhighgui
现在没有任何错误,但是当我使用运行可执行文件时
./facedetection
我得到这个错误:
./facedetection: error while loading shared libraries: libcv.so.2.0: cannot open shared object file: No such file or directory
当我进行符号链接时,使用:
ln -s libcv.so libcv.so.2.0
那么错误是:
ln: failed to create symbolic link 'libcv.so.2.0': File exists
不知道如何解决这个问题。
提前谢谢..
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
我正在尝试创建一个示例 OpenCV 程序的 linux 可执行文件,该程序将与 .so 文件动态链接,并将在安装了 OpenCV 未但安装了 .so 文件的机器上执行将出现在该 linux 机器上。
我已经搜索了很多关于此的帖子,但仍然没有成功。
我这样编译opencv:
cd OpenCV-2.0.0/
cmake -DBUILD_SHARED_LIBS=ON .
make
然后所有编译好的库都在OpenCV-2.0.0/lib中创建
然后,在 samples/c 目录中,我这样做了:
g++ facedetect.cpp -o facedetection -I /home/harsh/Downloads/OpenCV-2.0.0/include/opencv/ -L/home/harsh/Downloads/OpenCV-2.0.0/lib/ -llibcv -llibcxcore -llibcvaux -llibml -llibhighgui
但错误是:
/usr/bin/ld: cannot find -llibcv
/usr/bin/ld: cannot find -llibcxcore
/usr/bin/ld: cannot find -llibcvaux
/usr/bin/ld: cannot find -llibml
/usr/bin/ld: cannot find -llibhighgui
collect2: ld returned 1 exit status
【问题讨论】:
苛刻 - 你已经问了很多问题,其中许多都有很好的答案。您应该通过将其中一些标记为已接受的答案来奖励回答者一些代表和复选标记! 【参考方案1】:使用-lcv
、-lcxcore
等
要链接到libfoo.so
,标志是-lfoo
,没有lib
部分。
如果您的库不在默认运行时库搜索路径中(如何设置/管理取决于您的操作系统和发行版),您需要告知动态链接器它们的位置。 (就像你必须在编译时添加 -L
标志一样。)
在 Linux 上,这是通过设置环境变量 LD_LIBRARY_PATH
来完成的,例如:
export LD_LIBRARY_PATH=/home/harsh/Downloads/OpenCV-2.0.0/lib/:$LD_LIBRARY_PATH
./your_app
【讨论】:
非常感谢 Mat,您对我的新问题有任何想法吗? 已编辑,但请做一些研究,这是非常非常频繁的询问和回答。以上是关于无法链接到 OpenCV (Linux) 的共享库的主要内容,如果未能解决你的问题,请参考以下文章