无法打开共享对象文件:没有这样的文件或目录;在 Eclipse 中运行或调试

Posted

技术标签:

【中文标题】无法打开共享对象文件:没有这样的文件或目录;在 Eclipse 中运行或调试【英文标题】:Cannot open shared object file: No such file or directory; Running or Debugging in Eclipse 【发布时间】:2013-01-21 22:26:36 【问题描述】:

在 Ubuntu 上,我在 Eclipse 中有一个 C++ 应用程序。该应用程序编译良好,我可以从命令行运行该应用程序。

但是当我尝试调试它或使用 Eclipse 运行它时,错误:

"Cannot open shared object file: No such file or directory" 被抛出到共享库中。

我已经在我的 bashrc 文件中设置了 LD_LIBRARY_PATH 并且还在运行配置和调试配置中设置了一个 LD_LIBRARY_PATH 环境变量:

/home/behlingb/Documents/api_libs/FileGDB_API/lib

为了让 Eclipse 运行它,我还缺少什么?

更新

此应用程序只需要一个共享对象文件,该文件来自第 3 方 API 下载。我刚刚发现,如果我将共享对象放在可执行文件所在的目录中,它将在 Eclipse 中调试。有没有办法指定不同的目录,这样我就不必为每个项目复制文件?

【问题讨论】:

我认为您在运行配置中设置 LD_LIBRARY_PATH 是正确的。您是否检查过以确保您正在使用该运行配置运行它?在 LiClipse 中,如果单击绿色圆圈向右的白色大箭头旁边的向下灰色小箭头,则可以选择要使用的运行配置。 我发现 Eclipse CDT (neon.3) 不是很“稳定”。有时,ctrl+arrow 不起作用。关闭窗口修复它。有时, LD_LIBRARY_PATH 没有附加我要求的内容。重新启动修复它。 【参考方案1】:

我使用的是 Kepler 版本的 Eclipse。

    在 Eclipse 中单击运行,然后单击调试配置 单击环境选项卡 点击新建 添加 LD_LIBRARY_PATH 并将其值设置为包含库的目录 重启 Eclipse

【讨论】:

【参考方案2】:

您可以使用strace 实用程序(然后grep 用于open 和/或stat 调用)获取运行smth 所需的.so 文件列表,然后使用locate(或在包中查找) 找出所需库的实际位置

【讨论】:

【参考方案3】:

根据@zuafi 的建议,您不必使用 grep 查找库并“定位”即可找到它们。

而是将 strace 的输出保存到文件中:

strace -o my_output_file.txt /path/to/my_executable_file

然后打开文件,在哪里可以看到

open("/a/path/to/some/library.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)

向下滚动这些行直到你点击

open("/real/path/to/some/library.so", O_RDONLY|O_CLOEXEC) = 3 (any value here)

这意味着在找到/real/path/to/some/library.so 之前,已经多次尝试在不同的路径中找到library.so。但最后在/real/path/to/some/找到了这个库。

只需将其复制并粘贴到您的 Eclipse 中!

【讨论】:

【参考方案4】:

如果您设置了LD_LIBRARY_PATH 并且它不起作用。关闭 Eclipes 并从命令终端运行它。我偶然发现这可以使它起作用。不确定原因,但可能与 Eclipes 初始化有关。

【讨论】:

顺便说一下,我使用的是 Luna 版本的 Eclipes 我猜这是因为终端源 ~/.bashrc 在启动时,而你在这个文件中有export LD_LIBRARY_PATH【参考方案5】:

这对 Eclipse Kepler 有效(我没有研究过旧版本)。 要使调试器能够加载您的共享库,尝试设置 LD_LIBRARY_PATH 将失败。然而,CDT 插件为此提供了一个共享库列表

运行菜单 -> 调试配置...

然后在配置对话框中

C/C++ 应用程序 -> 你的项目 -> 调试器 标签-> 共享库标签

【讨论】:

这看起来应该是正确的答案。我已经在火星上试过了,它似乎不适合我。 同意威胁,对于 Luna 上的 CDT,这似乎不起作用,仅添加 LD_LIBRARY_PATH 似乎具有 monzie 描述的预期效果

以上是关于无法打开共享对象文件:没有这样的文件或目录;在 Eclipse 中运行或调试的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

ImportError:libICE.so.6:无法打开共享对象文件:没有这样的文件或目录

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