“无法打开共享对象文件”,但是它存在。

9

我在寻找为什么这个库(matio)在我的电脑上无法工作。在我的Makefile文件中,我有以下代码:

LIBS += -L/home/brian/.../matio-1.5.6/src/.libs/ -lmatio

当我尝试运行我的代码(链接良好)时,出现以下错误:
``` error while loading shared libraries: libmatio.so.4: cannot open shared object file: No such file or directory ```
使用-L标志指定的目录中存在libmatio.so.4。
我已经构建了该库,并且似乎只有少量编写错误通过了make check(这很好,因为我只需要它用于读取)。
我尝试过以下方法:
- 指定名称(即-l:libmatio.so.4.0.2) - 将路径添加到LD_LIBRARY_PATH中 - 在/etc/ld.so.conf中添加路径并运行sudo ldconfig - 在/etc/ld.so.conf.d中添加一个新文件,其中包含路径并运行sudo ldconfig
(当我运行ldconfig -p | grep matio时,没有返回任何内容。我在ldconfig方面做错了什么吗?)

我已经使用libmatio.a让它运行起来了,但仍然不知道为什么.so文件无法工作。 - brian
你找到这个问题的解决方案了吗? - Our
我刚刚使用了上面提到的解决方法。下面的答案可能指向了解决方案,但我从未找到它。 - brian
1个回答

8
错误实际上告诉您“库缓存中不存在具有该名称的兼容库”,而不是“磁盘上不存在具有该文件名的文件”。因此,令人困惑的是,当共享对象文件格式错误时会发生这种情况。请确保它是由正确的编译器构建的正确平台。您可以使用file查看并使用ldd验证可执行文件的动态链接失败。

1
我已经构建了这个库,就我所知它是正确完成的。ldd 显示:libmatio.so.4 => 未找到。有什么提示可以检查出问题在哪里吗? - brian
@brian:你的文件权限怎么样了? - Lightness Races in Orbit
@brian:是的,但你漏掉了一些东西,为什么不给我们展示一下文件权限,这样我们就可以告诉你它们是否正确 :P - Lightness Races in Orbit
正确,-rwxrwxr-x 1 brian brian 934782 Mar 9 11:30 libmatio.so.4.0.2 - brian
你的(可能的)库版本符号链接是否正确?如果将库重命名为libmatio.so而没有任何版本标识符,并链接到该库会怎样? - juzzlin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接