阿摩線上測驗 登入

申論題資訊

試卷:106年 - 106 司法特種考試_三等_檢察事務官電子資訊組:程式語言#64196
科目:程式語言
年份:106年
排序:0

申論題內容

三、幾乎所有的程式都需要一些支援程式,例如輸出輸入、數學函式、記憶體管理等。 這些支援程式一般都是放在支援程式庫(libraries)裡面,然後在適當的時機和主程 式連結(linking)。連結的時機可以分為兩大類:靜態連結(static linking)及動態連 結(dynamic linking)。請舉例解釋靜態連結及動態連結,並請說明產生與使用相關 程式庫的方法。(20 分)

詳解 (共 1 筆)

詳解 提供者:hchungw
靜態連結(Static Linking)與動態連結(Dynamic Linking)
靜態連結(Static Linking)
定義:在編譯時期將所有需要的程式庫整合到最終的可執行文件中。
示例:
bash
複製程式碼
gcc -o myprogram main.c libmath.a
優點:
自包含:可執行文件包含所有需要的程式碼,獨立於外部程式庫。
執行速度快:不需要在運行時期解析外部程式庫的地址。
部署簡單:不依賴於外部程式庫的版本。
缺點:
文件體積大:包含所有程式庫的副本,增加了文件大小。
更新困難:需要重新編譯所有使用該程式庫的可執行文件。
重複:不同的可執行文件可能包含相同的程式庫代碼,浪費空間。
動態連結(Dynamic Linking)
定義:在運行時期將程式庫載入到內存中並連結到程式中。
示例:
bash
複製程式碼
gcc -o myprogram main.c -lmath
優點:
文件體積小:可執行文件不包含程式庫的副本。
易於更新:可以單獨更新程式庫而無需重新編譯可執行文件。
共用程式庫:多個應用程序可以共用同一個動態程式庫,節省空間。
缺點:
依賴性:需要在運行環境中確保存在所需的程式庫。
啟動時間稍長:在運行時期需要解析和載入程式庫,可能稍微增加啟動時間。
版本衝突:不同的應用程序可能需要不同版本的程式庫。
程式庫的產生與使用
產生靜態程式庫
創建靜態程式庫文件:
bash
複製程式碼
gcc -c add.c subtract.c
ar rcs libmath.a add.o subtract.o
使用靜態程式庫:
bash
複製程式碼
gcc -o myprogram main.c libmath.a
產生動態程式庫
創建動態程式庫文件:
bash
複製程式碼
gcc -fPIC -c add.c subtract.c
gcc -shared -o libmath.so add.o subtract.o
使用動態程式庫:
bash
複製程式碼
gcc -o myprogram main.c -L. -lmath
並確保 libmath.so 在運行時期可被找到,如設置 LD_LIBRARY_PATH 環境變量。