Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么英特尔编译器生成需要libiomp5mt.dll的输出,即使我要求静态链接?_C++_Openmp_Intel - Fatal编程技术网

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

C++ 为什么英特尔编译器生成需要libiomp5mt.dll的输出,即使我要求静态链接?,c++,openmp,intel,C++,Openmp,Intel,我正在编译一个带有/MT开关的openmp项目(或者在visual studio设置中相当于“C++:代码生成:运行时库:多线程”) 然而,Visual Studio仍然报告说,当我认为上述设置要求静态链接时,我的输出需要libiomp5mt.dll(多线程dll) 有没有别的选择我错过了 可选的,如果DLL是一个要求,我假定我可以在我自己的应用程序中重新分配英特尔的DLL, < P>以上的开关仅用于C++运行时,OpenMP是一个不是C++运行时的一部分的外部库,因此交换机对它没有任何影响。

我正在编译一个带有/MT开关的openmp项目(或者在visual studio设置中相当于“C++:代码生成:运行时库:多线程”)

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

有没有别的选择我错过了


可选的,如果DLL是一个要求,我假定我可以在我自己的应用程序中重新分配英特尔的DLL,

< P>以上的开关仅用于C++运行时,OpenMP是一个不是C++运行时的一部分的外部库,因此交换机对它没有任何影响。
根据DLL的重新分发,查看DLL附带产品的许可证。您可能被允许重新分发它。

英特尔网站上说:

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

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


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

创建代码库有两种方法。静态库和dll(扩展名:*.lib和*dll)

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