我正在开发一个生成多个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可以正确加载?
答案 0 :(得分:3)
有关DLL搜索顺序的完整信息位于MSDN网站上:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586%28v=vs.85%29.aspx
简短版本: 在DLL加载期间,操作系统按以下顺序搜索它:
因此,如果要将exe文件与dll分开,则必须将包含库的文件夹放入PATH。 另一个选项是使用 LoadLibraryEx http://msdn.microsoft.com/en-us/library/windows/desktop/ms684179%28v=vs.85%29.aspx
加载动态DLL