今天 kane 哥跟我說,Boost 編出來有 1 GB,想起來以前在醉資心也聽過有人這麼說…
那到底為什麼這麼大?
身為傳教士,當然不能回答說:
你問我!我擲交!
這種答案可是天理不容啊~啊~啊~啊~
套句聖主播說的話:揪竟~這個 boost 的背後,又有什麼不為人知的血淚因緣呢?文章的第一集,我們使用下面的指令來編譯:
bjam.exe --build-dir="your_dir\boost_1_35_0" --build-type=complete --toolset=msvc install
由於我們選擇 complete build type,所以 bjam 會產生出 12 個sublibrary,而 sublibrary 下又因為 vc 編譯組態可分為 single/multi-thread、dynamic/static link or debug/release mode、是否包含standard libary 四種不同,再檔名是否加上版本號碼的部份。算一算沒有七七四十九種,卻也大概一個 sublibrary 會有 18 種檔案。但檔案重複率很高就是了,像是下面以 Boost.DateTime 為例:
18 個檔案只有 10 種版本
下面則是 Boost.DateTime 各版本的名稱及檔案大小,單項下內字體顏色一樣者表示檔案內容一樣(用 vim diff 測試)。
Linking Type | Mode | Name | Size |
Dynamic Link | Debug | boost_date_time-vc80-mt-gd-1_35.dll | 84.0 KB (86,016 bytes) |
boost_date_time-vc80-mt-gd-1_35.lib | 26.6 KB (27,278 bytes) | ||
boost_date_time-vc80-mt-gd.lib | |||
Release | boost_date_time-vc80-mt-1_35.dll | 48.0 KB (49,152 bytes) | |
boost_date_time-vc80-mt-1_35.dll | 26.4 KB (27,120 bytes) | ||
boost_date_time-vc80-mt.dll | |||
Static Link | debug | libboost_date_time-vc80-mt-gd-1_35.lib | 1.50 MB (1,577,314 bytes) |
libboost_date_time-vc80-mt-gd.lib | |||
libboost_date_time-vc80-mt-sgd-1_35.lib | 1.66 MB (1,747,582 bytes) | ||
libboost_date_time-vc80-mt-sgd.lib | |||
libboost_date_time-vc80-sgd-1_35.lib | 1.66 MB (1,747,486 bytes) | ||
libboost_date_time-vc80-sgd.lib | |||
Release | libboost_date_time-vc80-mt-1_35.lib | 523 KB (535,964 bytes) | |
libboost_date_time-vc80-mt.lib | |||
libboost_date_time-vc80-mt-s-1_35.lib | 661 KB (677,130 bytes) | ||
libboost_date_time-vc80-mt-s.lib | |||
libboost_date_time-vc80-s-1_35.lib | 661 KB (677,034 bytes) | ||
libboost_date_time-vc80-s.lib |
例外,若是想瞭解這些檔案的命名規則,可以參考
http://www.boost.org/doc/libs/1_35_0/more/getting_started/windows.html
基本規則是這樣的:
[prefix]boost_sublibrary-name-toolset-version-options-[version-number]
- prefix
lib 開頭代表 static link library ,沒有的則是 dll 和 import library - sublibrary-name
顧名思義 - toolset-version
顧名思義 - option
1. mt -> multithread
2. s -> static link with C++ Standard Library & runtime library
3. d -> sublibrary 的 code 有 debug information
4. g -> C++ Standard Library & runtime library 都含 debug information - version number
boost 的 version number
3 則留言:
知道為何 --build-type=complete 不會 build 出 static link library 的 Boost.DateTime 嗎?
我蠻好奇 fr3@k 所說的問題答案,可以說明一下嗎?
另外,我想請教一下為什麼 Dynamic Link 的 dll 要有兩個版本?有版號跟沒版號的版本?
BTW,表格中第三行第六列(不含表頭)的副檔名標錯囉,應該是 lib 而不是 dll。
張貼留言