c++ - "cannot open shared object file,"但它存在

标签 c++ .so

我无法找到为什么这个库 (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

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 做错了什么?)

最佳答案

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

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

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

关于c++ - "cannot open shared object file,"但它存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35928696/

相关文章:

c++ - std::map 似乎找到了不存在的元素

c++ - 如何分配指向具有多重继承的类的指针

c++ - 使用 C++ 读取 HTML 文本

c - Golang 使用 cgo 从共享 c 库调用函数

java - 从不同的Android项目调用c程序

c++ - 在命名空间内部还是外部实现 C++ 函数?

c++ - 将项目添加到 QStandardItemModel 中的列

android - .so文件在android中的实际用途是什么?

android - SO 文件的权限被拒绝

c++ - 在不破坏兼容性的情况下可以在 .so 库中更改什么