簡體   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