GCC - 链接到另一个文件夹中的库,但二进制文件不能运行

时间:2013-11-07 21:19:35

标签: c++ windows gcc dll

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

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

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

从我已经完成的研究看来,即使我可以链接到其他文件夹中的库,加载它们仍然需要它们在同一个文件夹中作为二进制文件。

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

1 个答案:

答案 0 :(得分: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环境变量中列出的目录。
  7. 因此,如果要将exe文件与dll分开,则必须将包含库的文件夹放入PATH。 另一个选项是使用 LoadLibraryEx http://msdn.microsoft.com/en-us/library/windows/desktop/ms684179%28v=vs.85%29.aspx

    加载动态DLL