为什么英特尔编译器产生的输出需要libiomp5mt.dll,即使我要求静态链接



我正在编译一个openmp项目与/MT开关(或等效在visual studio设置," c++:代码生成:运行时库:多线程".

Visual Studio仍然报告我的输出需要libiomp5mt.dll(多线程dll),而我认为上面的设置是要求静态链接。

有没有我错过的其他选项?

或者,如果dll是一个要求,我假设我被允许重新分发英特尔的dll与我自己的应用程序?

英特尔网站上说:

强烈建议您动态链接在兼容性OpenMP*运行时库libiomp(即libiomp5md)。lib和libiomp5md.dll(位于[编译器目录]lib目录),即使其他库是静态链接的。不建议链接到静态OpenMP*运行时库(即libiomp5mt.lib)。因为在一个应用程序中使用多个OpenMP库会导致性能问题(线程太多),并且如果初始化多个副本可能会导致正确性问题。

因此,尽管您可以将OpenMP配置为静态链接,并且该配置独立于C运行时,但建议不要这样做。

据我所知,英特尔的OpenMP许可允许免版税的再分发。为了安全起见,您应该检查您的OpenMP附带的许可证。

上述开关仅适用于c++运行时,OpenMP是一个外部库,不是c++运行时的一部分。因此,开关对它没有任何影响。

根据DLL的再分发,查看与DLL一起发布的产品的许可证。你可能被允许重新发布它

有两种创建代码库的方法。作为静态库和dll(扩展名:*)。Lib和* dll)。

如果只有一个可用的Dll,你只能动态链接到它,而不是静态链接到它。可能让您感到困惑的是,Dll通常有一个您链接到的库文件,其中包含进入Dll的所有入口点。

最新更新