阿摩線上測驗 登入

申論題資訊

試卷:107年 - 107 鐵路特種考試_高員三級_資訊處理:程式語言#69616
科目:程式語言
年份:107年
排序:0

申論題內容

三、在 Unix/Linux 的系統裡,libfoo.a 與 libfoo.so 之類的程式庫(libraries)有何不同? 並依生成方式、使用方式、使用時機、對系統的影響等面向說明。 (20 分) (請接第四頁)

詳解 (共 2 筆)

詳解 提供者:114年高考上榜

生成方式:

libfoo.a是一個靜態程式庫,而libfoo.so是一個動態程式庫。靜態程式庫在編譯時被綁定(link)到執行檔案中,動態程式庫則是在運行時被載入到記憶體中。
 
使用方式:
靜態程式庫的使用方式比較簡單,只需要在編譯時把它們和執行檔案一起編譯即可。動態程式庫則需要在執行時載入,通常是使用動態載入(dynamic linking)的方式載入,例如在C語言中使用dlopen()和dlsym()函式庫。
 
使用時機:
靜態程式庫的使用時機通常是在編譯時期已知需要的程式庫,並把它們與執行檔案一起編譯。動態程式庫則更適合在執行時期需要根據需要動態載入的程式庫。
 
對系統的影響:
靜態程式庫會增加執行檔案的大小,因為程式庫被編譯進去了。而動態程式庫則不會增加執行檔案的大小,但需要在執行時期載入程式庫,可能會影響系統的效能。
 
總結來說,靜態程式庫在編譯時期被綁定到執行檔案中,使用方便,但會增加執行檔案的大小。動態程式庫則更適合在執行時期需要根據需要動態載入的程式庫,不會增加執行檔案的大小,但可能會影響系統效能。在實際應用中,需要根據具體情況選擇適合的程式庫。
詳解 提供者:hchungw

總結

比較維度 靜態程式庫(libfoo.a) 動態程式庫(libfoo.so)
生成方式 使用 ar 打包目標文件 使用 gcc -shared 生成 .so 文件
使用方式 編譯時鏈接,代碼被包含在可執行文件中 編譯時聲明依賴,運行時加載
使用時機 需要獨立可執行文件或無法使用動態鏈接時 需要減少可執行文件大小,共享庫代碼,或需要動態加載時
對系統的影響 可執行文件較大,內存和磁碟空間使用較多,更新需重新編譯 可執行文件較小,共享內存和磁碟空間,更新不需重新編譯,但啟動時稍有開銷

這些特點使得靜態程式庫和動態程式庫各有其適用的情景,選擇哪種類型的程式庫應根據具體的應用需求來決定。