gcc a.c b.c -o b.out
和
gcc a.c -o a.o
ar rcs liba.a a.o
gcc b.c -la -o b.out
有何區別?
在什麼情況下我應該選擇一種嗎?
gcc a.c b.c -o b.out
和
gcc a.c -o a.o
ar rcs liba.a a.o
gcc b.c -la -o b.out
有何區別?
在什麼情況下我應該選擇一種嗎?
當您要多次重複使用編譯模塊時,創建庫(變體2)是非常好的,而且項目真的很大(它可以節省一點編譯時間)。否則,沒有區別。
引用的dmckee's answer部分:
動態聯可以減少資源消耗總量(如果有多個進程共享相同的庫(包括 版本「相同」,當然))。我相信這是 的論據,它推動了它在大多數環境中的存在。這裏的「資源」 包括磁盤空間,RAM和緩存空間。當然,如果您的動態鏈接器不夠靈活,則存在風險DLL hell。
動態鏈接意味着bug修復和升級庫傳播改善您產品而無需運送任何東西。
- 插件始終呼籲動態鏈接。
- 靜態聯,意味着你可以知道代碼將運行在非常有限的環境(早在啓動過程中,或在救援 模式)。
- 靜態聯可以使二進制易於分發到不同的用戶環境(在發送大而多, 資源飢餓計劃的成本)。
- 靜態聯可以允許稍微更快的啓動時間,但是這取決於在一定程度上大小和您 程序的複雜性,並都在操作系統加載策略的細節。
閱讀完整的答案更具體的信息。