如果我发布使用 IPP 库的 DLL,我是不是也应该发布 IPP DLL?

Posted

技术标签:

【中文标题】如果我发布使用 IPP 库的 DLL,我是不是也应该发布 IPP DLL?【英文标题】:If I ship a DLL that use IPP library, should I also ship IPP DLLs?如果我发布使用 IPP 库的 DLL,我是否也应该发布 IPP DLL? 【发布时间】:2018-11-23 08:26:11 【问题描述】:

我正在阅读关于 IPP Dispatcher 的有趣的article。在某些时候它写道:调度是指在运行时检测 CPU 特性然后选择与您的 CPU 对应的英特尔 IPP 优化库集的过程。例如,在 \ia32\ipp 目录中,ippip8.dll 库文件包含英特尔® SSE4.2 处理器的 32 位优化图像处理库; ‘ippi’指图像处理库,‘p8’指32位SSE4.2架构。

这是否意味着如果我使用ipp.h 发布一个DLL,当我向客户发货时,他们也需要IPP 库的DLL 版本?还是它们在最终构建中自动编译并与.libs 链接?

我没有在文档上看到 DLL example

【问题讨论】:

【参考方案1】:

您不必全部发货,系统会在运行时自动分派。如果某个库“缺失”,则运行时将选择较低兼容的运行时(因此您至少应该拥有 SSE2 运行时)。

【讨论】:

呃,整个过程都不​​清楚。这就是我认为应该理解的:假设我构建了MyPlug.dll,它使用ippsExp_64f。当我在不同的机器/cpu 上运行它时,默认情况下ippInit 将自动捕获哪个 CPU 正在运行,并将调度到优化(重载)ippsExp_64f 函数。但是所有这些重载都在程序本身内,否则调度程序会调用 IPP DLL? (所以用户在我的程序旁边也需要它们)? 在图书馆里。 “在图书馆里”是什么意思? .lib 和 .dll 都是库。但是这些将包含在最终(唯一)dll(.lib)中,而其他需要单独发送。 .lib 是 .dll 的定义(如果您要链接 dll)。它们不包含代码。 .lib 不是已经编译好的目标文件的集合吗?

以上是关于如果我发布使用 IPP 库的 DLL,我是不是也应该发布 IPP DLL?的主要内容,如果未能解决你的问题,请参考以下文章

静态链接库的动态 DLL

DLL编程中引用其它DLL库的问题

将使用 ITK 或 OpenCV 库的现有 C++ 项目转换为 DLL 是不是可能?

在没有类型库的情况下使用来自 C# 的 COM dll

结合英特尔 IPP 和 TBB

C#调用DLL问题