2013-01-21 42 views
8

在Ubuntu上,我在Eclipse中有一个C++应用程序。该应用程序编译得很好,我可以从命令行运行该应用程序。无法打开共享对象文件:无此文件或目录;在Eclipse中运行或调试

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

"Cannot open shared object file: No such file or directory"被扔在一个共享库。

我在我的.bashrc文件中设置LD_LIBRARY_PATH,也同时在运行配置和调试配置设置PATH环境变量设置为:

/家庭/ behlingb /文档/ api_libs/FileGDB_API/lib目录

我还错过了什么让Eclipse运行它?



UPDATE

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

+1

我认为你在正确的轨道上在运行配置中设置LD_LIBRARY_PATH。你有没有检查过,确保你使用该运行配置运行它?在LiClipse中,如果您单击除大,绿色圆圈,向右,白色箭头之外的小,向下,灰色箭头,则可以选择要使用的运行配置。 – BenB

+0

我发现Eclipse CDT(neon.3)不是很“稳定”。有时,按Ctrl +箭头不起作用。关闭窗口修复它。有时,LD_LIBRARY_PATH不会附加我所要求的内容。重新启动修复它。 – Hei

回答

2

可以使用strace实用程序(,然后open和/或stat电话grep)去运行平稳所需的.so文件的列表,然后使用locate(或包中找到),找出所需的实际位置lib

10

我使用Eclipse的Kepler版本。

  1. 在上运行,那么调试配置
  2. 点击Eclipse中单击环境选项卡
  3. 点击新
  4. 加入LD_LIBRARY_PATH和包含库其值设置为目录
  5. 重新启动Eclipse
1

这对Eclipse Kepler有效(我还没有看过旧版本)。 要启用调试器加载共享库,尝试设置LD_LIBRARY_PATH将失败。然而CDT插件提供了共享库列表为此

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

然后在配置对话框

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

The Kepler dialog for adding debug shared libraries

+0

这看起来应该是正确的答案。我在火星上试过了,它似乎不适合我。 – Menace

2

根据什么@zuafi建议,你不必到grep的图书馆和'定位”找到他们。

相反strace的输出保存到一个文件:

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

然后打开该文件,在这里你可以看到

open("https://stackoverflow.com/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 in不同的路径。但最后在/real/path/to/some/找到了该库。

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

3

如果您已设置LD_LIBRARY_PATH并且不起作用。关闭Eclipes并从命令终端运行它。我不小心发现这可能会使它工作。不知道原因,但可能与Eclipes初始化有关。

+0

顺便说一句,我使用的Luna版本的Eclipes – Northern

+0

我猜这是因为终端来源〜/ .bashrc启动时,你有'出口LD_LIBRARY_PATH'在这个文件。 – Efreeto

相关问题