【问题标题】:How to run c++ program written in eclipse, from terminal如何从终端运行用eclipse编写的c++程序
【发布时间】:2018-11-04 15:22:53
【问题描述】:

我使用的是 Ubuntu,并且我已经在 Eclipse Neon 中编写了我的 c++ 代码。 我的工作区包含 4 个项目。主项目称为 BaseCppProjectRun(它包含 main.cpp 文件),我还有其他具有以下名称的项目:编码器、frmwrk、NetworkLayer - BaseCppProjectRun 使用它们中的每一个。

如果我直接从 Eclipse 运行我的程序,一切正常。 但我想从终端运行我的程序——但我不能。 因为当我试图像这样运行我的程序时:

root@ubuntu:/builds/BaseCppProject/BaseCppProjectRun# ./Debug/BaseCppProjectRun

我收到此错误:

./Debug/BaseCppProjectRun: error while loading shared libraries: libfrmwrk.so: cannot open shared object file: No such file or directory

正如我之前所说,如果我直接从 eclipse 运行它,一切正常。

如何从终端运行我的程序?

【问题讨论】:

  • 您的共享库是否与可执行文件在同一个文件夹中(或者对它可见)?我的猜测是“不”。我不在 Eclipse 中编写 C++ 代码,但对于 Java,可以选择导出“可执行文件”并将库与它一起打包。 C ++可能有类似的选择吗?否则,您可以手动复制库。
  • 默认运行时加载器与可执行文件不在同一目录中。幸运的是,这不是 Windows。
  • @JeromeReinländer 我试图将我的 so 文件复制到我的可执行文件的同一目录中。我遇到了同样的错误。
  • @YaronIsraeli ...直接在 Jerome 的评论下方阅读我的评论...
  • @MarcusMüller 感谢您的更正。

标签: c++ linux eclipse terminal


【解决方案1】:

Linux 应该如何知道在哪里可以找到 libfrmwrk.so,如果你不把它放在它通常看起来的地方,也不告诉它在哪里可以找到它。

Eclipse 似乎设置了运行时链接器查看的路径,以便在加载程序时,运行时链接器知道在哪里可以找到您的 libfrmwrk.so 等等。

你要么不得不

  • 安装这些库 (.so),以便在默认位置找到它们,或者
  • 设置LD_LIBRARY_PATH 包含所有要查看的文件夹。

我已经很久没有使用 Eclipse CDT 了,但您现在可能可以导出一些项目格式,以便您轻松安装。

另一件事:您似乎正在以 root 身份运行仍在调试的软件:这是一个糟糕的主意,如果可以避免,请避免。

【讨论】:

  • 我试图将我的so文件复制到我的可执行文件的同一目录中。但我遇到了同样的错误。而关于使用 LD_LIBRARY_PATH 的第二个选项,我不知道如何使用它。因此,如果您有任何示例以及我在哪里编辑此参数,它可能会有很大帮助
  • 你为什么认为这会有所帮助?!我的回答特别说什么会有所帮助,将文件复制到同一个文件夹不在其中。
  • 您能否提供有关如何执行这些步骤的更多信息:安装这些库 (.so) 以便在默认位置找到它们,或设置 LD_LIBRARY_PATH 以包含所有要查看的文件夹。
  • 设置 LD_LIBARAY_PATH 没有帮助。我尝试在终端中执行此操作:LD_LIBRARY_PATH="/builds/BaseCppProject/frmwrk/Debug/";"/builds/BaseCppProject/Encoders/Debug/" ;"/builds/BaseCppProject/NetworkLayer/Debug/" 然后:export LD_LIBRARY_PATH 然后我尝试再次运行我的程序。但我遇到了同样的错误。
  • LD_LIBRARY_PATH 值不正确。但仍然有正确的它不起作用。 export LD_LIBRARY_PATH="/builds/BaseCppProject/frmwrk/Debug/:/builds/BaseCppProject/Encoders/Debug/:/builds/BaseCppProject/NetworkLayer/Debug/"
【解决方案2】:

我终于明白了!

参考 Marcus Muller 的回答 + 我的步骤这是我修复它的方法(所有步骤都通过终端):

  1. 在我的工作区目录中创建新目录并将其命名为 libs。
  2. 在您的每个项目中执行以下操作:右键单击 > c/C++ 构建 > 构建步骤(选项卡)并在构建后步骤中粘贴以下内容:

cp ${BuildArtifactFilePrefix}${BuildArtifactFileName} "${WorkspaceDirPath}/libs/"

此代码在您编译程序时将 so 文件直接复制到您的 libs 目录中。

最后,在你的终端执行这个:

export LD_LIBRARY_PATH=/builds/BaseCppProject/libs/

现在你可以通过终端运行你的程序了。

【讨论】:

    猜你喜欢
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 2015-04-02
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 2020-12-30
    相关资源
    最近更新 更多