线下写的问题已经解决,但我面临一个新的相关问题。 与以前略有不同,我正在编译和链接示例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
不知道怎么解决这个问题。
提前致谢..
<击> IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 撞击>
我正在尝试创建一个示例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
答案 0 :(得分:4)
使用-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