为什么intel编译器会生成需要libiomp5mt.dll的输出,即使我要求静态链接?

时间:2011-09-01 12:57:31

标签: c++ openmp intel

我正在使用/ MT开关编译一个openmp项目(或者在Visual Studio设置中等效,“C ++:代码生成:运行时库:多线程”。

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

我错过了哪个地方?

或者,如果dll是必需的,我认为我可以在我自己的应用程序旁边重新分配Intel的dll吗?

3 个答案:

答案 0 :(得分:3)

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

根据DLL的重新分发,请查看DLL附带的产品的许可证。你可能被允许重新发布它。

答案 1 :(得分:3)

英特尔网站说:

  

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

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

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

答案 2 :(得分:1)

有两种方法可以创建代码库。作为静态Libs和Dlls(Extentsions:* .lib和* dll)。

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