如何更改应用程序使用的.dll搜索路径?

How can I change the .dll search path my application uses?

本文关键字:dll 搜索 路径 何更改 应用程序      更新时间:2023-10-16

随着应用程序的增长,我发现自己使用了越来越多的第三方库,应用程序目录中的.dll的数量也在增长(撰写本文时为11个)。这本身并不是一个问题,但是它很难看。我宁愿能把这些放在"bin/"或其他东西。

这是可以做到的,还是我在浪费时间在一些不是真正问题的事情上?

唯一的真正的优势,这将给我,我可以把x86和x64版本的exe在同一目录下,并让他们从dll的适当文件夹加载(bin32/bin64/,例如)。

我用的是c++和MinGW-W64。

您可以使用GNU链接器的-rpath标志。

例如,这将在本地目录中搜索依赖dll: -Wl,-rpath,./

所以在你的例子中你需要:-Wl,-rpath,./bin

下面的链接很好地解释了DLL的搜索顺序。
引用:

在系统搜索DLL之前,它会检查以下内容:
如果在内存中已经加载了具有相同模块名称的DLL,系统将使用加载的DLL,无论它在哪个目录中。系统不搜索DLL。
如果该DLL位于运行该应用程序的Windows版本的已知DLL列表中,则系统使用该已知DLL的副本(以及该已知DLL的依赖DLL,如果有的话)。系统不搜索DLL。
有关当前系统上已知dll的列表,请参阅以下注册表项:HKEY_LOCAL_MACHINE system CurrentControlSetControlSession Manager knowndls .


您可以参考使用SetDllDirectory添加自定义搜索目录。

MSDN动态链接库搜索顺序