2014年6月29日 星期日

C 語言函式庫


C/CPP 靜態函式庫 and 動態函式庫


在撰寫 C/CPP 時,可先將所需要的 function 程式,建立物件產生函式庫,主程式 Compiler 時可供連結。


動態函式庫(Share Lib) : 程式開始執行時才載入,以「lib」開頭程式庫 ,名稱末端再加上「.so」或「.a」。

靜態函式庫(Static Lib)   : 函式庫中的元件會連結到我們的執行檔中,執行程式時,不需要再函式庫的配合。

以小編目前執行的 Project 為例,


(1) 常用 function 建立靜態函式庫。
(2) 建立動態函式庫,DPI 連結 test_main.o / libstim.a  ( System 可使用參考之 Share Library)


(1) Static Lib.
        // function file : func1.c , func2.c 
        // compile function file 產生物件檔 *.o , -m32 編輯成32位元執行檔
        // 設定 head file library path LIB_PATH  
        $/user/cpp> gcc -m32 -c test1.c test2.c -I {LIB_PATH}

        // 用 ar 指令將所有的 .o (物件檔) 組合成 static library " libstim.a "
        $/user/cpp>  ar -rcs libstim.a *.o

(#)    // test_main file 
        $/user/cpp>  gcc -m32 -c test_main.c -I {LIB_PATH}        

(2) Share Lib. and DPI Link
        //-shared 表示要編譯成 shared library        
        // -L Share Library Path        
        // -l Share Library File        
        // -Wl 用於參遞參數給linker,因此-soname與libmylib.so.1會被傳給linker處理。
        $/user/cpp>  gcc -WI -m32 -shared -o libdpi.so test_main.o libstim.a \
                            -L {SHARE_LIB_PATH}  \
                            -l  {SHEAR_LIB_DATA}

沒有留言:

張貼留言