.so
,它是一種特殊的目標檔案(object file),可以在程式執行時被載入(連結)進來。使用動態連結庫的優點是:程式的可執行檔案更小,便於程式的模組化以及更新,同時,有效記憶體的使用效率更高。
-shared
選項。輸入檔案可以是原始檔、組合檔案或者目標檔案。-fPIC
選項。-fPIC 選項作用於編譯階段,告訴編譯器產生與位置無關程式碼(Position-Independent Code);這樣一來,產生的程式碼中就沒有絕對地址了,全部使用相對地址,所以程式碼可以被載入器載入到記憶體的任意位置,都可以正確的執行。這正是共用庫所要求的,共用庫被載入時,在記憶體的位置不是固定的。$ gcc -fPIC -shared func.c -o libfunc.so
從目標檔案生成動態連結庫:
$ gcc -fPIC -c func.c -o func.o
$ gcc -shared func.o -o libfunc.so
$ gcc main.c libfunc.so -o app.out
將 main.c 和 libfunc.so 一起編譯成 app.out,當 app.out 執行時,會動態地載入連結庫 libfunc.so。