2014年7月26日 星期六

Linux shared library memo

目的

       建立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 file
           gcc -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

其他工具

       1. ldd 可以用觀察目標lbrary, 執行檔相依於哪些shared library


沒有留言:

張貼留言