我目前正在移植一個庫(不是我自己寫的,我只是「移植它)使用MinGW編譯器。該庫是一個真正的重量級,具有各種C++「黑魔法」(多重繼承,模板模板模板,非常宏重等)。MinGW二進制3x大小與MSVC二進制
現在,過了幾個星期,我得到的一切都很好地編譯,它也似乎很好地工作(單元測試工作,以及演示)。
但是,我發現的錯誤是MinGW二進制文件的大小與MSVC二進制文件相反。我知道MinGW二進制文件通常要稍微大一點,因爲它們必須包含自己的非MS系統庫,但我們談論的是MinGW爲33 MB,MSVC爲13 MB。 這就是「釋放」(-O3和-s標誌)版本!
這些都是我的MinGW進行編譯標誌:
-c -O3 -s -MMD -march=native -frtti
和鏈接器是這樣的:
-shared -s -static-libgcc -static-libstdc++
我知道,RTTI增加了一些大小,但它也必須是在MSVC二進制文件中。而靜態libgcc和libstdC++庫不能那麼大......或者他們可以嗎?
我在這裏錯過了什麼?通常情況下,MinGW和MSVC之間的尺寸差異不是即大。
首先,我們的存儲庫關心。 ;)特別是當我不得不重新上傳這個庫多次時,我是否應該改變庫中的某些東西(我無法上傳源代碼,只是將二進制文件上傳到我們自己的回購庫中)。我會嘗試你建議的標誌。看看是否有區別。 – TheSHEEEP
靜態鏈接到MSVC是什麼意思?靜態鏈接什麼?我正在創建一個動態庫和兩個。或者你的意思是運行時?如果是這樣,我認爲MSVC的C++運行時不是〜20MB大,是嗎? – TheSHEEEP
在GCC的情況下,您正在靜態鏈接libgcc和libstdC++,這是一大堆代碼。如果你在MSVC的情況下沒有這樣做(我甚至不確定你是否可以),比較文件大小是沒有意義的。如果不靜態鏈接GCC運行時庫,會發生什麼情況? – rubenvb