无法打开共享对象文件:没有这样的文件或目录;在 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:无法打开共享对象文件:没有这样的文件或目录