![](/img/trans.png)
[英]Why does my program ask for OpencV's .dll even though I link statically against its .lib
[英]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.