c++ - 无法链接到 OpenCV (Linux) 的共享库

标签 c++ c linux opencv

在线下方写的问题已解决,但我面临一个新的相关问题。 与之前略有不同,我将示例 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

当我进行符号链接(symbolic link)时,使用:

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

最佳答案

使用-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

关于c++ - 无法链接到 OpenCV (Linux) 的共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10181947/

相关文章:

c++ - 成员 func 如何以*编程方式*调用它的 'name of the object'?

c++ - 如何允许控制台程序接受来自回调函数的数据

c++ - GCC 或 CLang 均未考虑部分类模板特化

创建 wpa_supplicant UI

c - UDP 发送到 () 错误 : invalid argument

c - 如何在 c/c++(openssl) 中验证任何类型的证书?

c++ - Juce中AudioSampleBuffer的延迟播放

c - 获取 malloc 合并错误的示例示例程序

linux - 打印不包含句号的行 linux

php - cURL 7.27.0-1 无法通过 Apache PHP 加载,但在 php 命令行上运行良好