繁体   English   中英

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

[英]Why does intel compiler produce output that requires libiomp5mt.dll, even though I ask for static linking?

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

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

我错过了其他地方吗?

或者,如果需要dll,我想我可以随自己的应用程序一起重新分发Intel的dll吗?

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

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

英特尔网站说:

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM