2011-09-01 67 views
1

我在,Visual Studio设置编译的OpenMP的项目与/ MT开关(或等效。为什么intel编译器生成需要libiomp5mt.dll的输出,即使我要求静态链接? “:代码生成:运行时库:C++多线程”

Visual Studio中仍,但是,报告说,我的输出要求libiomp5mt.dll(多线程DLL)时,我还以为上面的设置被要求静态链接。

难道还有其他选择的地方我错过了吗?

或者,如果DLL是一个要求,我相信我允许重新分配英特尔的dll以及我自己的应用程序?

回答

2

英特尔网站上说:

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

因此,尽管您可以配置OpenMP以静态链接,并且此配置与C运行时无关,但建议您不要使用。

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

2

以上开关仅适用于C++运行时,OpenMP是不属于C++运行时的外部库。因此,交换机对它没有任何影响。

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

0

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

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

相关问题