linux下的C語言開發(靜態庫/動態庫)

動態連接庫不是Linux獨有的特性,在windows下面也存在這樣的特性。通常來講,windows下面的動態鏈接庫是以*.dll做爲結尾的,而linux下面的動態鏈接庫是以*.so結尾的。和靜態連接庫相比,動態鏈接庫能夠共享內存資源,這樣能夠減小內存消耗。另外,動態鏈接是須要通過操做系統加載器的幫助才能被普通執行文件發現的,因此動態鏈接庫能夠減小連接的次數。有了這個特色,咱們就不難發現爲何不少軟件的補丁其實都是以動態庫發佈的。linux

    那麼,在Linux上動態庫是怎麼生成的呢?windows

 

[cpp]  view plain  copy
 
  1. #include "test.h"  
  2.   
  3. int add(int a, int b)  
  4. {  
  5.     return a + b;  
  6. }  
    頭文件格式,

 

 

[cpp]  view plain  copy
 
  1. #ifndef  _TEST_H  
  2. #define  _TEST_H  
  3.   
  4. int add(int a, int b);  
  5. #endif  
    此時若是咱們想要生成動態庫,要作的工做其實很是簡單,輸入gcc -shared -fPIC -o libtest.so test.c便可。回車後輸入ls,咱們就能夠發現當前目錄下面出現了libtest.so文件。
[cpp]  view plain  copy
 
  1. #include <stdio.h>  
  2. #include "test.h"  
  3.   
  4. int main()  
  5. {  
  6.     printf("%d\n", add(2, 3));  
  7.     return 1;  
  8. }  
    在上面的代碼當中,咱們發現使用到了add函數,那麼此時如何才能生成一個執行文件呢?也很簡單,輸入gcc hello.c -o  hello ./libtest.so。而後輸入./hello,此時能夠驗證一下執行文件運行是否正確。在編寫靜態庫的時候,我說過靜態庫是彙編連接到執行文件當中的,而動態庫不會。朋友們能夠作個小實驗,刪除libtest.so,而後輸入./hello。此時你們能夠看看系統有沒有錯誤返回?
    這個時候,有的朋友就會問了,那在windows下面dll應該怎麼編寫呢?其實也不難,只要在test.h上面稍做改變便可。其餘的步驟和 靜態庫的操做是基本相似的。
[cpp]  view plain  copy
 
  1. #ifndef  _TEST_H  
  2. #define _TEST_H  
  3.   
  4. #ifdef USR_DLL  
  5. #define DLL_API _declspec(dllexport)  
  6. #else  
  7. #define DLL_API _declspec(dllimport)  
  8. #endif  
  9.   
  10. DLL_API int add(int a, int b);  
  11.   
  12. #endif  

今天咱們討論的問題是靜態庫。爲了顯示windows和Linux建立靜態庫之間的差異,咱們首先在windows上面利用Visual C++6.0建立一個靜態庫。源文件的代碼很簡單,函數

 

[cpp]  view plain  copy
 
  1. #include "test.h"  
  2.   
  3. int add(int a, int b)  
  4. {  
  5.     return a + b;  
  6. }  
    頭文件代碼也不難,

 

 

[cpp]  view plain  copy
 
  1. #ifndef _TEST_H  
  2. #define _TEST_H  
  3.   
  4. int add(int a, int b);  
  5. #endif  

    若是你須要在windows上面建立一個靜態庫,那麼你須要進行下面的操做,工具

(1)打開visual C++ 6.0工具,單擊【File】-> 【New】->【Projects】
(2)選擇【Win32 Static Library】,同時在【Project Name】寫上項目名稱,在【Location】選擇項目保存地址
(3)單擊【Ok】,繼續單擊【Finish】,再單擊【Ok】,這樣一個靜態庫工程就建立好了
(4)從新單擊【File】->【New】->【Files】,選擇【C++ Source Files】,
(5)選中【Add to pproject】,將源文件加入到剛纔建立的工程中去,在File中輸入文件名+.c後綴
(6)重複四、5的操做,加入一個文件名+.h頭文件
(7)分別在頭文件和源文件中輸入上面的代碼,單擊F7按鈕,便可在Debug目錄中生成*.lib靜態庫文件

    那麼,在linux下面應該怎麼運行呢?其實很簡單,兩條命令解決,
(1)首先生成*.o文件,輸入gcc -c test.c -o test.o
(2)利用ar命令生成靜態庫,輸入ar rc libtest.a test.o

    此時若是還有一個hello.c文件使用到了這個靜態庫,好比說 ,
[cpp]  view plain  copy
 
  1. #include <stdio.h>  
  2. #include "test.h"  
  3.   
  4. int main()  
  5. {  
  6.     printf("%d\n", add(2, 3));  
  7.     return 1;  
  8. }  

 

    其實也很簡單,輸入一個簡單的命令就能夠生成執行文件了,
(1)首先輸入gcc hello.c -o hello ./libtest.apost

(2)輸入./hello,驗證生成的執行文件是否正確spa

(3)朋友們能夠刪除libtest.a文件,從新輸入./hello,驗證執行文件是否能夠正常運行操作系統

相關文章
相關標籤/搜索