DLL Hell with Intel Redistributables
DLL Hell with Intel Redistributables
我们的一些用户一直在抱怨libmmd.dll在我们的插件加载中未发现错误。
一些背景:
- 我说的是Windows(就此而言,8)上发生的问题。
- 我们为数字音频工作站开发插件(用于数字声音)处理目的)。
- 我们的插件是用 VS2012 编码的 DLL,通过调用 icl 的 Perl 脚本使用英特尔编译器 2015 进行编译.exe来自CMD。
- 它的依赖项之一是英特尔提供的数学运算库在其可再发行组件的 2015 风格中提供(我们与我们的插件一起安装)称为libmmd.dll。
为了方便起见,我们称插件为DLL插件.dll(!!)。
我没有太多时间在受影响用户的一台机器上,但从我所看到的情况来看,重新安装英特尔的可再发行软件包没有帮助,只是将 libmmd.dll 移动到与 plugin.dll 相同的文件夹中。
无论这种(突然和意外)行为的原因是什么,我们都希望能够提供针对此类问题(DLL Hell)保护的软件。
我们想要的是插件.dll首先在特定目录中查找库(可配置会更好),然后按其通常的搜索顺序查找。
我尝试使用清单、注册表、库名称、链接器选项......唯一实际有效的方法是使用/MT 切换/MD 选项(但使用静态库重新编译确实会增加插件.dll的大小)并将库复制到文件夹插件.dll 在。
有什么想法吗?谢谢!
SetDllDirectory
函数允许您将文件夹路径添加到 DLL 搜索顺序。它将添加到第二位,紧跟在程序文件夹本身的后面。
但是,这只会影响通过LoadLibrary
加载的DLL;如果您的DLL是静态加载的,则不会有任何区别。
相关文章:
- 安装 Visual Studio 2015 时出现的错误,关于"Microsoft Visual C++ 2015 Redistributable"
- VC++ Redistributable 2012 or 2013 or 2015?
- 将Visual Studio 2015的Visual C++Redistributable添加到InstallShiel
- 是否可以将 Visual C++ Redistributable 2010 和/或 DirectX 10 安装到特定文件
- C++Redistributable 2012更新3检测
- 需要什么样的开发环境才能实现“c++ 2008 Redistributable”