使用共享对象文件

Posted

技术标签:

【中文标题】使用共享对象文件【英文标题】:Using Shared Object Files 【发布时间】:2014-02-27 19:31:21 【问题描述】:

我使用 cmake 在 ubuntu 12.04 上安装了 opencv 2.4.3。安装时,.so 文件放在 /usr/local/lib 目录中。当我使用 .so 文件的默认位置(即 /usr/local/lib)在终端中使用以下行编译我的代码时,它可以正常工作

g++ fileName.cpp -lopencv_core -lopencv_highgui -lopencv_imgproc 

我正在尝试。我从 /usr/local/bin 复制了所需的共享对象文件,并将它们放在新文件夹位置 /home/nishant/Desktop/lib 中。我复制了以下文件及其各自的 .so.2.4 和 .so.2.4.3 文件: 1) libopencv_core.so 2) libopencv_highgui.so 3) libopencv_imgproc.so

然后我分别将名称更改为 libcore.so 、 libhighgui.so 和 libimgproc.so 。我更改了它们的名称,以便不应该从 /usr/local/lib 使用旧的 .so 文件。现在,当我尝试使用新文件夹位置中的共享对象文件编译我的代码时,我收到以下错误: 终端命令:

g++ filename.cpp -L/home/nishant/Desktop/lib -lcore -lhighgui -limgproc

错误:

/usr/bin/ld: cannot find -lcore
/usr/bin/ld: cannot find -lhighgui
/usr/bin/ld: cannot find -limgproc
collect2: ld returned 1 exit status

有趣的是,以下工作:

g++ filename.cpp -L/home/nishant/Desktop/lib -lopencv_core -lopencv_highgui -lopencv_imgproc

原因:正在使用 /usr/local/lib 中的 .so 文件。 我的问题:如何使用新文件夹位置中的 .so 文件来使我的代码正常工作。

【问题讨论】:

你确定 /home/nishant/Desktop/lib/libcore.so 是实际的库文件,或者如果不是,符号链接指向正确的路径?如果您只是重命名符号链接,您将不会更改它们的目标,您将必须重新创建指向重命名目标的链接。使用ls -l 列出符号链接目标。 【参考方案1】:

我看到了三种方式:

1。 请更新您的 LD_LIBRARY_PATH - 在运行 g++ 之前添加库路径。

2。 请将您的库所在的目录添加到/etc/ld.so.conf 并运行:

sudo ldconfig

然后运行g++

3。 请创建一个新文件:/etc/ld.so.conf.d/local.conf 并添加包含您的库的目录的路径并运行:

sudo ldconfig

然后运行 ​​g++。

【讨论】:

以上是关于使用共享对象文件的主要内容,如果未能解决你的问题,请参考以下文章

在 Android Studio 中使用 .so(共享对象)文件

加载共享库时出错,无法打开共享对象文件:没有这样的文件或目录(hiredis)

Roslaunch 无法打开共享对象文件:没有这样的文件或目录

加载共享库时出错:libgfortran.so.1:无法打开共享对象文件:没有这样的文件或目录

ctags:加载共享库时出错:libgpm.so.1:无法打开共享对象文件:没有这样的文件或目录

无法在 Python 中加载共享对象文件 [重复]