如何更改应用程序使用的.dll搜索路径?
How can I change the .dll search path my application uses?
随着应用程序的增长,我发现自己使用了越来越多的第三方库,应用程序目录中的.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动态链接库搜索顺序
相关文章:
- 挂起和取消挂起一个文件DLL
- 有根的二进制搜索树.保留与其父级的链接
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 在C++中搜索嵌套多映射值
- 如何从客户端为COM服务器设置dll搜索路径?
- 搜索.NET组件的搜索路径取决于C /CLI DLL
- JNI DLL如何搜索其依赖的本机DLL
- C++设置 DLL 搜索位置
- 插件 DLL 引用的 DLL 的搜索路径
- 可以在不设置链接器>常规>附加库目录的情况下搜索哪种 dll 或 lib
- 如何设置 dll 搜索路径
- 为什么我的应用程序在错误的DLL中搜索函数
- 如何更改应用程序使用的.dll搜索路径?
- 用java中的System.loadLibrary()加载的.dll的搜索路径
- 我如何使用find_package使可执行搜索.dll二进制文件
- 以编程方式自定义 DLL 搜索目录
- 在DLL搜索路径中添加路径以帮助执行依赖于DLL的EXE