如何在调试和重新分发期间包含DLL?

时间:2017-05-05 00:18:22

标签: c++ dll visual-studio-2015 path environment-variables

这个问题已在SO上多次提出并回答,但我无法得到建议的解决方案适用于我的情况。我使用的库依赖于许多(~50)DLL。这是Windows 7 x64,Visual Studio 2015,C ++。

目标:(1)在开发期间,让调试器访问所需的DLL。 (2)对于部署,请在Windows安装程序中提供所需的DLL,或者将其作为压缩文件提供,以复制到可执行文件夹或其他文件夹中。如果DLL不在可执行文件夹中,则需要在执行期间告诉pgm。

对于(1),我尝试修改配置属性/调试/环境变量,以添加DLL的路径,C:\ ProgramFiles \ Octave \ Octave-4.2.1 \ bin。这不是出于某种原因。

在我更改任何内容之前,配置中显示的环境变量为$(LocalDebuggerEnvironment),评估值为PATH=;%PATH%,而Inheirited值为PATH=$(VCRedistPaths)%PATH%

添加条目后,我有

环境:

PATH=C:\ProgramFiles\Octave\Octave-4.2.1\bin%PATH%$(LocalDebuggerEnvironment)

我的参赛作品:

PATH=C:\ProgramFiles\Octave\Octave-4.2.1\bin%PATH%

评估值:

PATH=C:\ProgramFiles\Octave\Octave-4.2.1\bin%PATH%
PATH=;%PATH%

继承值:

PATH=$(VCRedistPaths)%PATH%

但启动调试器时找不到DLL。

更改VS调试器的路径环境的正确方法是什么?

处理第(2)部分的建议方法是什么?

2 个答案:

答案 0 :(得分:1)

某些PATH环境变量连接看起来有问题。

尝试在文字字符串和变量的逻辑串联的任何地方插入;(分号)分隔符。

例如:

PATH=C:\ProgramFiles\Octave\Octave-4.2.1\bin%PATH%$(LocalDebuggerEnvironment)

会变成:

PATH=C:\ProgramFiles\Octave\Octave-4.2.1\bin;%PATH%;$(LocalDebuggerEnvironment)

PATH=C:\ProgramFiles\Octave\Octave-4.2.1\bin%PATH%

会变成:

PATH=C:\ProgramFiles\Octave\Octave-4.2.1\bin;%PATH%

等等。

答案 1 :(得分:0)

您可能在路径条目和%PATH%环境变量之间遗漏了分号。尝试:

PATH=C:\ProgramFiles\Octave\Octave-4.2.1\bin;%PATH%

另一种选择是在系统环境中设置%PATH%以包含包含DLL的目录。您必须重新启动Visual Studio才能获取环境更改。如果在调试器中正确设置路径,则可能不需要此选项。

您的DLL可以与程序位于同一目录中,在大多数情况下,程序都可以找到它们。 (也有例外......)您可以阅读here,了解Windows在运行不同类型的程序时如何搜索DLL。

查看程序搜索DLL的简单方法是使用Process Monitor向您显示程序搜索DLL的实时路径。