2011-09-01 63 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的所有入口點。

相關問題