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

时间:2014-08-24 07:48:36

标签: c++ dll mingw-w64

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

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

唯一的真正的优势,这将使我能够将exe的x86和x64版本放在同一目录中,并从dll的相应文件夹({{1例如,}或bin32/

我正在使用C ++和MinGW-W64。

2 个答案:

答案 0 :(得分:1)

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

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

特别针对您的情况,您需要:-Wl,-rpath,./bin

答案 1 :(得分:0)

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

  

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

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

Dynamic-Link Library Search Order on MSDN