【问题标题】:"cannot open shared object file," but it exists“无法打开共享对象文件”,但它存在
【发布时间】:2016-03-10 22:33:20
【问题描述】:

我很难找到为什么这个库 (matio) 不适合我。在我的 Makefile 我有这个:

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

当我尝试运行我的代码(链接正常)时,我收到此错误:

加载共享库时出错:libmatio.so.4: cannot open shared object file: No such file or directory

libmatio.so.4 存在于 -L 标志指定的目录中。

我构建了这个库,它似乎通过了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 不起作用。
  • 你找到解决这个问题的方法了吗?
  • 我刚刚使用了上面提到的解决方法。我猜下面的答案是指向解决方案,但我从未找到它。

标签: c++ .so


【解决方案1】:

错误是实际上告诉您“库缓存中不存在具有该名称的兼容库”,而不是“磁盘上不存在具有该文件名的文件”。

因此,令人困惑的是,当共享对象文件的格式错误时,可能会发生这种情况。

确保它是由正确的编译器为正确的平台构建的!您可以查看file 并在您的可执行文件上使用ldd 验证动态链接是否失败。

【讨论】:

  • 我建立了库,据我所知,它做得正确。 ldd 显示:libmatio.so.4 => not found. 关于如何检查它有什么问题的任何提示?
  • @brian:你的文件权限怎么样?
  • @brian:是的,但你错过了一些东西,所以为什么不告诉我们文件权限是什么,我们可以告诉你它们是否正确:P
  • 对,-rwxrwxr-x 1 brian brian 934782 Mar 9 11:30 libmatio.so.4.0.2
  • 您的(可能的)库版本符号链接是否正确?如果您将库重命名为 libmatio.so 而没有任何版本标识符并链接到它怎么办?
猜你喜欢
  • 2011-12-23
  • 2013-04-21
  • 2013-05-05
  • 2017-05-21
  • 2012-05-24
  • 2014-02-10
  • 2021-01-06
  • 2018-07-03
  • 2011-02-12
相关资源
最近更新 更多