2010-10-15 277 views
6

我有C程序,我在Windows上用mingw進行編譯。它工作正常,但需要MSVCRT.DLL。我想鏈接靜態(就像我可以在Visual Studio中做的那樣)。這可能嗎?我可以使用mingw靜態鏈接MSVCRT嗎?

我試過-static標誌到gcc,它沒有做任何改變。

對於使用標準C++庫的C++程序怎麼樣?

+0

關於你的最後一個問題......如果你在談論STL,它只是標題。 – 2010-10-15 14:59:46

+0

@Armen:但還沒有C++ MSVCPT的DLL或類似的東西? – zaharpopov 2010-10-15 15:12:22

+0

請注意,MSVCRT.DLL作爲系統組件包含在幾乎每個Windows版本中,而您通常可能會遇到這種情況。特別是,您不需要將它與您的應用程序一起分發,因爲您的最終用戶已經擁有了它。那麼一個自然的問題是,爲什麼你需要避免與其動態鏈接呢? – RBerteig 2010-10-15 18:31:16

回答

7

我相信MinGW由於版權原因不使用靜態運行時庫。

你也許可以嘗試使用newlib(http://sourceware.org/newlib/),以創建一個不鏈接到msvcrt.dll

+1

+1版權迴避。這是它已經在每個Windows系統上的一個聰明的副作用。使用MinGW構建的程序需要它,但不必分發它。因此,沒有版權問題。 – RBerteig 2010-10-15 18:33:20

+1

即使我沒有在代碼中使用任何std C函數,它需要MSVCRT我認爲對於在main之前/之後運行的CRT啓動/清除代碼。 newlib也提供這個功能嗎? – zaharpopov 2010-10-16 06:48:33

-2

鏈接與gcc -static -static-libgcc -static-libstdc++的可執行文件,你會不會需要libgcc_s_dw2-1.dlllibstdc++-6.dll

+0

Downvoting這樣的答案沒有解釋是不是真的有幫助。沒有明顯的原因,爲什麼這個答案是錯誤的。 – JBentley 2014-03-27 21:42:10

+1

如何處理導致這不會從生成的二進制文件相關性中刪除msvcrt.dll? – paulm 2014-04-18 00:44:11

+0

,因爲它仍然需要msvcrt.dll – sherpya 2016-03-02 00:24:36

0

已經花了,而搜索對於我自己,我碰到this post介紹正在進行Mingw32備用C運行時間庫。但是,它尚未準備好使用,開發人員似乎已經放棄了它。 Home page link here

在這裏發佈這個答案,希望它對未來某些時候用戶搜索引擎有用。

相關問題