0

我正在开发一个生成多个 EXE 和多个 DLL 的 C++ 项目。为了简洁起见,我希望在 Lib 文件夹中生成这些 DLL,因此构建的项目如下所示:

MyProject
----myExe1.exe
----myExe2.exe
----Lib
    ----myLib1.dll
    ----myLib2.dll

我能够成功地将 DLL 构建到 Lib 文件夹中,并且能够使用-L..\bin\LibEXE 的链接命令成功链接到新位置的 DLL。但是,当我实际运行 EXE 时,他们抱怨找不到相关的 DLL。

从我所做的研究来看,即使我可以链接到其他文件夹中的库,加载它们仍然需要它们与二进制文件位于同一文件夹中。

GCC,链接库,没有找到?暗示这只是事情的本意,但提到“系统必须能够找到 dll;即它必须在当前工作目录中,在路径中的目录中,或其目录​​中必须添加到用于此事物的特殊环境变量中”。正在引用什么“特殊环境变量”(我假设它不是 %PATH% 或者注释不会在前面特别提到路径),有没有办法可以设置它以便我的 DLL 可以正确加载?

4

1 回答 1

3

有关 DLL 搜索顺序的完整信息位于 MSDN 站点:http: //msdn.microsoft.com/en-us/library/windows/desktop/ms682586%28v=vs.85%29.aspx

短版:在 DLL 加载期间,操作系统按以下顺序搜索它:

  1. 加载应用程序的目录。
  2. 系统目录(即C:\Windows\System32)
  3. 16 位系统目录。
  4. Windows 目录(即 C:\Windows)
  5. 当前目录。
  6. PATH 环境变量中列出的目录。

因此,如果您想将 exe 文件与 dll 分开,则必须将包含库的文件夹放入 PATH 中。另一种选择是使用LoadLibraryEx http://msdn.microsoft.com/en-us/library/windows/desktop/ms684179%28v=vs.85%29.aspx动态加载 DLL

于 2013-11-07T21:55:25.677 回答