12

在 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 中调试。有没有办法指定不同的目录,这样我就不必为每个项目复制文件?

4

5 回答 5

20

我正在使用 Eclipse 的 Kepler 版本。

  1. 在 Eclipse 中点击 Run 然后 Debug Configurations
  2. 单击环境选项卡
  3. 点击新建
  4. 添加 LD_LIBRARY_PATH 并将其值设置为包含库的目录
  5. 重启 Eclipse
于 2013-11-14T12:08:19.197 回答
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 中!

于 2014-04-10T19:58:07.067 回答
3

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

于 2015-03-06T04:56:15.767 回答
3

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

于 2013-01-21T22:40:19.347 回答
2

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

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

然后在配置对话框中

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

用于添加调试共享库的 Kepler 对话框

于 2013-11-29T17:18:58.403 回答