我成立了一个C ++项目在Visual Studio中使用DLL。 该文库的.h的.lib和.dll文件。 程序编译和运行,并成功使用该库。 该DLL被放在来源 ,而不是输出目录的根目录。 当我建,我预计将复制的形式源输出目录中的DLL,但它不是。 所有我在输出目录中看到的是型,应用,增量链接文件,程序调试数据库的3个文件。
也许我错了,但我认为DLL需要在同一个文件夹中的输出目录中的可执行。 发生什么了?
我成立了一个C ++项目在Visual Studio中使用DLL。 该文库的.h的.lib和.dll文件。 程序编译和运行,并成功使用该库。 该DLL被放在来源 ,而不是输出目录的根目录。 当我建,我预计将复制的形式源输出目录中的DLL,但它不是。 所有我在输出目录中看到的是型,应用,增量链接文件,程序调试数据库的3个文件。
也许我错了,但我认为DLL需要在同一个文件夹中的输出目录中的可执行。 发生什么了?
这是我不得不寻找和困难,但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的较新版本复制。
当我建,我预计将复制的形式源输出目录中的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 -所有它认为是一个copy
或xcopy
命令。