为什么DLL没有复制到输出目录?C++Visual Studio
Why is the DLL not copied to output directory? C++ Visual Studio
我设置了一个c++项目,以便在visual studio中使用DLL。该库有.h.lib和.dll文件。该程序编译并运行,并成功地使用了库。DLL被放在源的根目录中,而不是输出目录中。当我构建时,我希望DLL从源复制到输出目录,但事实并非如此。我在输出目录中看到的只是类型、应用程序、增量链接器文件和程序调试数据库的3个文件。
也许我错了,但我认为DLL需要与输出目录中的可执行文件位于同一文件夹中。那到底发生了什么?
这也是我很难找到的东西,但VS不会为您复制.dll。您必须通过创建后生成事件来告知它。查看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是较新版本时进行复制。
当我构建时,我希望DLL从源复制到输出目录,但不是。
也许我错了,但我认为DLL需要在文件夹作为输出目录中的可执行文件。那到底发生了什么?
首先,DLL不是构建过程的一部分,这也是Visual Studio不处理DLL的原因之一。
话虽如此,Visual Studio不应该自动将DLL复制到可执行目录的另一个原因是,Visual Studio没有也不能假设这是您想要的DLL所在的位置。
它不能假设这一点,因为当加载DLL时,您可能希望将DLL放置在Windows操作系统将找到的目录中。请参阅此链接:
动态链接库搜索顺序
如果你正在测试你的应用程序,看看如果它被放在PATH上的某个目录中,它是否会正确加载DLL,该怎么办?如果Visual Studio总是将DLL复制到您的可执行目录中,您将如何做到这一点?
另一种情况是:如果您的程序使用LoadLibrary
,并且想要测试如果DLL是而不是,程序是否正常运行,该怎么办?
正如另一个答案所建议的那样,这就是为什么您必须共同努力,告诉Visual Studio在构建后事件中该做什么。此外,即使在应用了生成后事件之后,VisualStudio仍然对DLL一无所知——它看到的只是一个copy
或xcopy
命令。
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何在MS Visual Studio 2019中运行QT UI
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- Visual Studio Code - C++ Debugger 無法啟動
- Visual Studio 2019:插入多个C++风格的单行注释
- Visual Studio Code "undefined reference to `WinMain@16'"
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- Visual Studio中的函数声明和函数定义问题
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- Visual Studio mkl_link_tool.exe链接错误
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 不同的Visual Studio版本中缺少.dll
- 用Visual Studio在C++中嵌入Julia
- Visual Studio 2017循环自动向量化问题
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- Visual Studio在尝试读取resource.txt文件时崩溃
- Visual Studio 2017 不允许我创建 C++ 专用模板