我设置了一个c ++项目来在visual studio中使用DLL。该库有.h .lib和.dll文件。该程序编译并运行,并成功使用该库。 DLL放在源的根目录中,而不是输出目录中。当我构建时,我希望将DLL从源代码复制到输出目录,但事实并非如此。我在输出目录中看到的只有3个类型,应用程序,增量链接器文件和程序调试数据库文件。
也许我错了,但我认为DLL需要与输出目录中的可执行文件位于同一文件夹中。那是怎么回事?
答案 0 :(得分:5)
这也是我很难找到的东西,但VS不会为你复制.dll。您必须通过创建Post-Build事件来告诉它。查看XCOPY上的链接: https://support.microsoft.com/en-us/kb/240268
我需要将一些dll复制到我的目标目录(构建目录),因此在我的项目设置中的Post-Build事件中使用了以下内容:
xcopy $(ProjectDir)openal32.dll $(TargetDir) /Y /D
只需替换" openal32.dll"使用你需要复制的任何dll,并为每个需要复制到目标(构建)目录的dll创建一个新的构建事件。
/ Y禁止提示确认覆盖 / D指示编译器只复制它,如果它是这个版本的更新版本的dll。
答案 1 :(得分:1)
当我构建时,我希望将DLL从源代码复制到 输出目录,但不是。
也许我错了,但我认为DLL需要相同 文件夹作为输出目录中的可执行文件。那是怎么回事?
首先,DLL不是构建过程的一部分,这就是为什么Visual Studio不对你的DLL做任何事情的原因。
话虽如此,Visual Studio不应该自动将DLL复制到可执行文件目录的另一个原因是Visual Studio不能并且不能假设这是您希望放置DLL的位置。
它不能假设这是因为您可能希望将DLL放在Windows操作系统在加载DLL时将找到的目录之一中。看到这个链接:
Dynamic Link Library Search Order
如果您正在测试您的应用程序,看它是否会正确加载DLL,如果它放在PATH的某个目录中,该怎么办?如果Visual Studio始终将DLL复制到可执行文件目录,您将如何做到这一点?
另一种情况:如果您的程序使用LoadLibrary
并想要测试程序是否正确,如果DLL
正如另一个答案所暗示的那样,这就是为什么你必须齐心协力告诉Visual Studio在后期构建事件中做什么。此外,即使应用了后期构建事件,Visual Studio仍然完全不了解您的DLL - 它看到的只是copy
或xcopy
命令。