DLL Hell with Intel Redistributables

DLL Hell with Intel Redistributables

本文关键字:Redistributables Intel with Hell DLL      更新时间:2023-10-16

我们的一些用户一直在抱怨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是静态加载的,则不会有任何区别。