關於靜態與動態編譯arm平台程式的比較

2021-09-07 05:09:35 字數 2106 閱讀 3482

因為近期弄個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 這個檔案中...