为什么DLL不会复制到输出目录? C ++的Visual Studio(Why is the D

2019-10-23 15:35发布

我成立了一个C ++项目在Visual Studio中使用DLL。 该文库的.h的.lib和.dll文件。 程序编译和运行,并成功使用该库。 该DLL被放在来源 ,而不是输出目录的根目录。 当我建,我预计将复制的形式源输出目录中的DLL,但它不是。 所有我在输出目录中看到的是型,应用,增量链接文件,程序调试数据库的3个文件。

也许我错了,但我认为DLL需要在同一个文件夹中的输出目录中的可执行。 发生什么了?

Answer 1:

这是我不得不寻找和困难,但VS不会复制.dll文件的为您服务。 您可以通过创建一个生成后事件告诉它。 检查出XCOPY链接: https://support.microsoft.com/en-us/kb/240268

我需要一些DLL的复制到这么用在我的项目设置的生成后事件以下我的目标目录(build目录):

xcopy $(ProjectDir)openal32.dll $(TargetDir) /Y /D

只需更换“openal32.dll”你需要复制,并作出新的构建事件的每个DLL您需要复制到目标(建立)目录的任何DLL。

/ Y禁止提示以确认改写/ D指示编译器只有当它在此生成的dll的较新版本复制。



Answer 2:

当我建,我预计将复制的形式源输出目录中的DLL,但它不是。

也许我错了,但我认为DLL需要在同一个文件夹中的输出目录中的可执行。 发生什么了?

首先,DLL的不是生成过程的一部分,这是原因之一,为什么Visual Studio中不与你的DLL做任何事情。

说了这么多,另外一个原因Visual Studio中不应该在DLL到可执行目录自动复制是Visual Studio不,不能以为这是您希望您的DLL放置。

它不能承担这一点,因为你可能希望你的DLL被放置在将被Windows操作系统被发现的时候,是时候来加载DLL的目录之一。 请参阅此链接:

动态链接库搜索顺序

如果你正在测试您的应用程序,看它是否会,如果它被放置在某个目录上您的路径正确加载DLL? 你会怎么做,如果Visual Studio的是对DLL始终复制到你的可执行文件的目录?

另一种情况:如果你的程序使用什么LoadLibrary ,并希望以测试程序,如果没有找到该DLL正确的行为?

至于其他的回答表明,这就是为什么你必须告诉Visual Studio中如何在后生成事件做的共同努力。 此外,即使在应用后生成事件后,Visual Studio中仍然知道绝对没有关于您的DLL -所有它认为是一个copyxcopy命令。



文章来源: Why is the DLL not copied to output directory? C++ Visual Studio