在Eclipse中,在运行时将共享库项目的dll文件添加到可执行项目路径中

时间:2012-10-24 12:04:05

标签: runtime shared-libraries eclipse-cdt

我在Windows 7下使用Eclipse Juno for c / c ++。我创建了一个共享库项目和一个可执行项目。我通过以下方式在可执行项目中添加了共享库项目作为参考:

可执行项目的属性 - > C / C ++一般 - >路径和符号 - >参考文献 - >检查共享库项目

所有这些在编译时都很有用,我可以在可执行项目中包含我的共享库项目的类,并使用它等。

然而,当我尝试在Eclipse中运行可执行项目时,我什么都没得到。没有错误,没有控制台输出。经过一些谷歌搜索后,我发现了类似的问题:

http://www.eclipse.org/forums/index.php/m/650331/

如上所述,显然将共享库项目添加到Eclipse中的可执行项目中,并不会在Eclipse内部运行时将dll文件添加到可执行(.exe)文件的PATH中。与Eclipse for Java类比:如果你有一个Java JAR项目A和另一个Java JAR项目B,通过在Eclipse中从B到A的引用,在Eclipse中运行项目A时,B的编译jar文件被添加到A的类路径中。我认为它与Eclipse的C / C ++类似,但显然不是。

果然,如果我手动获取.exe文件和.dll文件,将它们放在同一文件夹中并运行.exe,一切正常。另外,如果我将.dll文件复制到Eclipse的可执行项目的编译目录中,我可以从Eclipse运行可执行项目,这没关系。

我的问题是,当我告诉它运行可执行项目时,有没有办法让Eclipse将该共享库项目的dll文件添加到运行时?我在上面链接的帖子中讨论的解决方案是手动将shard库项目的编译目录添加到Eclipse的可执行项目的运行配置中,即将其添加到PATH变量。但是我发现这很麻烦且不可移植,如果Eclipse管理这两个项目,它应该能够将所有必要的内容传递给运行时。

2 个答案:

答案 0 :(得分:9)

好吧,我已经在运行时手动将库项目的dll添加到可删除项目的路径中。我确实找到了一种方法,使它更具可移植性和项目位置中立(即如果你将两个项目的源文件夹移动到另一台机器,并在Eclipse中重新打开它们,它应该仍然有效):

  1. 右键单击可执行项目 - >以...运行 - >运行配置

  2. 在环境选项卡中
  3. 单击“新建...”以添加新的环境变量

  4. 将变量命名为“PATH”,并为其赋予与此类似的值:

    $ {ENV_VAR:PATH}; $ {workspace_loc:/ cppAStar /调试}

  5. 其中:

    • $ {env_var:PATH}是Eclipse的说法“获取Eclipse中声明的PATH环境变量的现有值”

    • “;”是将exisitng PATH条目与我们即将添加的新条目分开

    • $ {workspace_loc:/ cppAStar / Debug}这告诉Eclipse获取名为cppAStar的工作空间项目的位置(这里cppAStar是我的共享库项目)然后“/ Debug”指的是这个特定项目的位置在构建时创建.dll文件。

    我无法弄清楚的问题:

    • “运行配置”中的“环境”选项卡有一个名为“将环境附加到本机环境”的选项。我认为通过检查这个我只需要在我声明的PATH变量中添加.dll目录的位置,它将被附加到现有的PATH。但是我没有设法做到这一点,因此在追加新值之前手动重新添加所有现有的PATH

答案 1 :(得分:1)

不幸的是,该解决方案不适用于debugg配置。见Bug 338420 -Launch configuration's Environment tab variables are not passed to the gdb process itself

有没有办法解决这个问题进行调试?我的意思是除了做后期构建步骤,如:

cmd / c copy“$ {BuildArtifactFilePrefix} $ {BuildArtifactFileName}”“$ {WorkspaceDirPath} \ bin \”