C++正在将DLL从根目录移到visual studio的子文件夹中
C++ Moving DLL out of root directory into a subfolder, visual studio
我是使用C++构建软件的初学者。在我的项目中,我链接到DLL,并将它们存储在根文件夹中。我这样做是因为我希望项目能够从一台机器移植到另一台机器,我还希望发布版本能够依赖于将东西安装到system32中等等。
问题是根文件夹中的所有DLL都很乱,所以我想将它们组织到子文件夹中。但我不能这样做,因为把DLL放在根目录子文件夹而不是根目录中,会出现错误。我认为这是因为DLL被复制到错误的输出位置,而不是exe所在的位置,而是在子文件夹中,就像源结构一样。我说得对吗?
什么解决方案可以让我的项目在机器之间仍然是可复制的/可移植的?
Windows在预定义位置搜索DLL(请参阅动态链接库搜索顺序(。应用程序所在目录的子目录不属于搜索顺序的一部分。
要实现您的需求,您需要将目录显式添加到搜索的位置。该过程包括两个步骤:
- 除了应用程序启动时的默认搜索位置外,还要为要搜索的每个目录调用AddDllDirectory
- 默认情况下,DLL导入在启动进程的主线程之前进行解析。若要允许应用程序更改DLL搜索路径,需要推迟导入解析。最简单的方法是使用/DELAYLOAD(延迟加载导入(链接器选项(有关其他信息,请参阅延迟加载DLL的链接器支持(
虽然可以将DLL分离到子目录中,但最好将它们全部与可执行映像放在一起。
如果将DLL放入子文件夹,而不是将其与可执行文件保持在同一目录中,则必须修改Windows中的PATH环境变量以指向每个子文件夹,或者以LoadLibrary+GetProcAddress的方式使用DLL,而不是通过导入库将其链接到可执行文件。
相关文章:
- 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++ 专用模板