2011-10-14 142 views
1

是否有可能在沒有lib的情況下編譯C++? 因爲當我試圖編譯我的程序與Mingw和cygwin的.exe文件後,我無法運行它,它說,有一個缺少的庫。對於cygwin,它是「cygwin1.dll」。是否可以在沒有lib的情況下編譯C++?

+1

試試'-mno-cygwin'。 –

+0

重複http://stackoverflow.com/questions/338406/cygwin1-dll-not-found-when-running-a-program-written-in-c-how-can-i-make-windo – Griwes

+2

@Griwes:幾乎不。那個人想找圖書館;這個人不想使用它(但不能)。 –

回答

4

用Cygwin構建的二進制文件始終依賴於cygwin1.dll。 Hovewer,如果你想避免這種情況,請使用鏈接器選項-mno-cygwin。通過這種方式,您可以確保不需要依賴於您需要隨應用程序一起提供的cygwin運行時庫。

MinGW也有一些本地依賴項。特別是,libgcc_s_dw2-1.dll(取決於工具鏈中使用的退繞類型)和mingwm10.dll。要擺脫它們,請使用鏈接器的-static-libgcc-mthreads選項。請注意,C++異常取決於此選項。

不過小記。你的問題 - 「有沒有可能編譯C++沒有lib?」是不正確的,因爲有總是對libs的一些依賴(除非你正在爲沒有OS的準系統硬件構建二進制文件),例如Windows的user32.dll。當然,Cygwin和MinGW都不適合這一點。

2

它不只是一個圖書館;這是您運行使用Cygwin編譯的應用程序所需的運行時。

如果你真的使用MinGW,那麼你可以完全避免Cygwin與-mno-cygwin,但即使那樣你將需要MinGW運行時,可能還需要C++標準庫。但是,這些通常可以鏈接到靜態,以便您不需要運送任何依賴關係。

2

一般答案 - no。 C++代碼通常需要運行時支持,以啓用RTTI和異常處理等功能。 因此無論如何,您必須動態或靜態地將可執行文件與libstdC++鏈接起來。

相關問題