目的
建立Shared library的目的在於彈性, 好維護! 如當需要對Library中部分的東西做修改時,只需要換一個library file即可, 而非需要對整個程式做編譯, 連結...
這裡需要注意的一點是shared library在程式執行時, 就會被載入, 而非等到要用到函式庫中的函式才被載入.
名稱
因為大家的用法沒有很ㄧ致, 只由下面幾個例子簡單代過.so name
ex: libtest.so.1
real name
ex: libtest.so.1.0
linker name
ex: libtest.so
編譯流程
1. 建立 obj filegcc -c -fPIC test.c
2.建立 shared library file
gcc -shared -o libtest.so test.o
[compiler options]
-c : 產生object file
-fPIC : 產生 position independent code
-shared : 產生shared library
使用Shared library
要使用shard library有兩種方法1. 直接指示 shared library所在 (shared library file需為全名)
gcc -o main.out main.c libtest.so
2. Linux慣用法
gcc -o main.out main.c -L. -ltest
[備註]
-L : 通知compiler到哪收尋shared libraries
-l : 通知compiler要引入哪些shared libraries, 這邊要注意gcc的慣例是
當寫成 -labcd時, gcc會收尋的檔名為libabcd.so
執行時要項
如果shared library沒有放置在系統預設路徑, 會產生收尋失敗的問題.可透過設定 LD_LIBRARY_PATH來指定shared library所在. 如下例:
export LD_LIBRARY_PATH=/opt/lib:$LD_LIBRARY_PATH
[備註] 標準Linuxshared library的設置方法,請參考 ldconfig
沒有留言:
張貼留言