因為近期弄個console程式,呼叫了readline,ncurses庫,這兩個動態庫加起來有四百多k。而程式事實上非常小,其它地方也沒使用到這兩個庫
所以想靜態編譯看看console程式有多大。
#arm-linux-gcc cli.c -o console libreadline.a libncurses.a
#ls -l
total 1932
-rwxrwxr-x 1 root root 8427 jul 7 15:19 cli
-rw-r--r-- 1 root root 6647 jul 7 17:57 cli.c
-rwxr-xr-x 1 root root 624681 jul 8 15:00 console
-rw-r--r-- 1 root root 108398 jul 7 16:05 libhistory.a
-rw-r--r-- 1 root root 433720 jul 7 17:09 libncurses.a
-rw-r--r-- 1 root root 780788 jul 7 16:05 libreadline.a
一看有六百多k。貌似大了點,加上-s試試
# arm-linux-gcc cli.c -o console libreadline.a libncurses.a -s
# ls -l
total 1576
-rwxrwxr-x 1 root root 8427 jul 7 15:19 cli
-rw-r--r-- 1 root root 6647 jul 7 17:57 cli.c
-rwxr-xr-x 1 root root 259323 jul 8 15:03 console
-rw-r--r-- 1 root root 108398 jul 7 16:05 libhistory.a
-rw-r--r-- 1 root root 433720 jul 7 17:09 libncurses.a
-rw-r--r-- 1 root root 780788 jul 7 16:05 libreadline.a
剩下260多k這樣。貌似能接受。
回過來再看看動態庫鏈結下的console程式
#arm-linux-gcc cli.c -o console -lreadline -lncurses
# ls -l
total 1332
-rwxrwxr-x 1 root root 8427 jul 7 15:19 cli
-rw-r--r-- 1 root root 6647 jul 7 17:57 cli.c
-rwxr-xr-x 1 root root 10445 jul 8 15:12 console
-rw-r--r-- 1 root root 108398 jul 7 16:05 libhistory.a
-rw-r--r-- 1 root root 433720 jul 7 17:09 libncurses.a
-rw-r--r-- 1 root root 780788 jul 7 16:05 libreadline.a
10.2k的樣子。加上動態庫也就四百多k
再進一步加上-s試試
#arm-linux-gcc cli.c -o console -lreadline -lncurses -s
# ls -l
total 1328
-rwxrwxr-x 1 root root 8427 jul 7 15:19 cli
-rw-r--r-- 1 root root 6647 jul 7 17:57 cli.c
-rwxr-xr-x 1 root root 6839 jul 8 15:13 console
-rw-r--r-- 1 root root 108398 jul 7 16:05 libhistory.a
-rw-r--r-- 1 root root 433720 jul 7 17:09 libncurses.a
-rw-r--r-- 1 root root 780788 jul 7 16:05 libreadline.a
6.7k的樣子,事實上程式是非常小的乙個。程式庫倒是非常大一坨。
靜態編譯與動態編譯的區別
靜態編譯與動態編譯的區別 動態編譯的可執行檔案需要附帶乙個的動態鏈結庫,在執行時,需要呼叫其對應動態鏈結庫中的命令。所以其優點一方面是縮小了執行檔案本身的體積,另一方面是加快了編譯速度,節省了系統資源。缺點一是哪怕是很簡單的程式,只用到了鏈結庫中的一兩條命令,也需要附帶乙個相對龐大的鏈結庫 二是如果...
靜態編譯與動態編譯的區別
靜態編譯與動態編譯的區別 動態鏈結庫 動態 有 靜態 無 動態編譯 動態編譯的可執行檔案 需要附帶乙個的動態鏈結庫 在執行時,需要呼叫其對應動態鏈結庫中的命令。優點 一方面是縮小了執行檔案本身的體積 一方面是加快了編譯速度,節省了系統資源。缺點 二是如果其他計算機上沒有安裝對應的執行庫,則用動態編譯...
Apache的靜態編譯與動態編譯詳解
靜態 在使用.configure 編譯的時候,如果不指定某個模組為動態,即沒有使用 enable mods shared module或者enable module shared 這個2個中的乙個,那麼所有的預設模組為靜態。那麼何謂靜態?其實就是編譯的時候所有的模組自己編譯進 httpd 這個檔案中...