避免将第三方DLL复制到调试文件夹中

7

我有一个使用Visual Studio(2008)构建的C++应用程序,链接到了Boost DLL。在调试时,似乎需要将Boost DLL复制到debug文件夹中,以便在IDE中运行的exe可以链接到它。我可以使用后期构建步骤来复制DLL,但我想知道是否有Visual Studio中的设置可以为调试提供额外的DLL搜索路径?


https://dev59.com/UnI-5IYBdhLWcg3wlpiW - Justin Ethier
所提及的问题涉及使用后构建步骤,而我希望避免这种情况。 - Permaquid
1
JaredPar提供了控制环境的提示,而不是寻找一些Visual Studio全局库搜索位置。原来有一个Visual Studio设置可以提供我想要的东西,通过(显然)向PATH环境变量添加另一个路径:配置属性>调试|环境。这是每个项目的,您可以使用环境变量。唯一缺少的部分是描述如何将我想要添加的调试环境合并到现有环境的文档。 - Permaquid
请参见答案https://dev59.com/U3RC5IYBdhLWcg3wCMrX#2916103。 - AntonK
3个回答

4
这里有一个轻微的误解。在调试期间,Visual Studio本身并不直接控制DLL加载到应用程序中。DLL的加载是由操作系统直接控制的。当请求加载时,操作系统会搜索一组有趣的目录以查找DLL。
VS影响加载的主要方式是通过将它们复制到生成输出目录。这通常是应用程序运行的目录之一,因此也是操作系统搜索必要DLL的路径之一。
操作系统搜索哪些目录受几个项目的控制。最容易更改的是环境变量(我相信是LIBPATH)。在Debug模式下,您可以更改此环境变量以指向其他目录,并从那里加载DLL。
但是,在Visual Studio中没有直接设置任何内容。

看起来你可以通过将环境设置为PATH=$(PATH);<您的其他路径>来在调试时更改环境,其中<您的其他路径>可以包含使用$()语法引用的环境变量。 您还需要Merge=Yes。 如果有任何解释详细信息的文档,我会感兴趣了解。 - Permaquid
我将此标记为“答案”,因为它是最有帮助的答案。不幸的是,其中说“在Visual Studio中没有你可以设置的东西”是不正确的(在我看来)-请参见我的问题下的评论。但是,感谢这个提示。 - Permaquid

1

1

在 Windows 上,对于隐式链接到 EXE 的 DLL,选项并不多。除了将 DLL 存储在与 EXE 相同的文件夹中,您还可以将其存储在列在 PATH 环境变量上的目录中。只有 c:\windows\system32 被保证被列出,您不能合理地使用该文件夹。更改系统环境的安装程序可能有效,但仍不合理。

唯一真正的选择是将 DLL 存储在 WinSxS 旁边的缓存中。您需要编写一个清单,以便 Windows 可以找到 DLL。您还需要编写一个安装程序,将 DLL 放入 WinSxS 中。鉴于文档的质量,您必须真的非常想这样做。

如果这只是调试时的考虑,那么在开发机器上更改 PATH 或许并不是什么大问题。使用控制面板,系统小程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接