首页 文章

为什么DLL没有复制到输出目录? C Visual Studio

提问于
浏览
1

我设置了一个c项目,在visual studio中使用DLL . 该库有.h .lib和.dll文件 . 该程序编译并运行,并成功使用该库 . DLL被放在 source 的根目录中,而不是输出目录 . 当我构建时,我希望将DLL从源代码复制到输出目录,但事实并非如此 . 我在输出目录中看到的只有3个类型,应用程序,增量链接器文件和程序调试数据库的文件 .

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

2 回答

  • 1

    这也是我很难找到的东西,但是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 .

  • 5

    当我构建时,我希望将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在post build事件中做什么 . 此外,即使应用了后期构建事件,Visual Studio仍然完全不了解您的DLL - 它看到的只是 copyxcopy 命令 .

相关问题