建立靜態庫和動態庫

2021-06-22 05:10:50 字數 1622 閱讀 6819

今天是2023年5月25日。

首先我想說一下在linux作業系統中,如何檢視程序和檢視程序樹。要想檢視程序只需敲入ps -aux 即可,也可用 top指令,至於它倆的具體區別後面在介紹。用pstree 來檢視程序樹。這裡面有子程序和父程序,一定要會看。

下來教你如何匯出核心資訊,和檢視映像。基於剛才的ps -aux  確定你想要檢視的程序(其實是它的pid)。然後用 cd  /proc   匯出核心資訊,在 cd/pid  之後   ls  檢視存放程序資訊,在用cat    maps  檢視映像。這樣你就可以清楚的看到每個變數和函式的一些存放位置了。

當你寫好一段**後,也許它有很多的 .c原始檔。這時候我們就可以建立乙個庫來存放它。那麼接下來我說說如何建立靜態庫和動態庫:

1>如何建立乙個靜態庫:

首先我們執行 gcc   -c   *.c    (這裡的*.c是指所有的.c源程式),之後會生成.o檔案。然後用  ar  -rs  libname.a   *.o   (這裡ar -rs 是建立靜態庫指令,lib是庫標識,name是靜態庫的名字可以自定義, .a是靜態庫的字尾名)生成靜態庫後在用 gcc   .c     -l.-lname (-l.是指在當前路徑下找,若找不到則去  /urs/lib下去)    之後再  ./a.out    這樣也可以得出正確的結果。

當然我們也可以把建立好 靜態庫移到  / urs/bin    (mv   libname.a    /usr/bin )即可,然後用gcc   .c-lname      之後再  ./a.out  也同樣可以。

2>如何建立乙個動態庫

首先我們執行 gcc   -c    -fpic     *.c (-fpic 表示與路徑無關的(記憶體中))   (這裡的*.c是指所有的.c源程式),之後會生成.o檔案。然後用  gcc    -shared-olibname.so   *.o  (-l.是指在當前路徑下找,若找不到則去  /urs/lib下去)  (這裡-shared  是建立動態庫指令,lib是庫標識,name是動態庫的名字可以自定義, .so是動態庫的字尾名)生成動態庫後必須要把動態庫移到  /usr/bin   下,否則在執行編譯時無法鏈結,即找不到位置和內容。移到   /usr/lib       下之後在用 gcc   .c         -lname    之後再  ./a.out    這樣也可以得出正確的結果。

下了我著重講講靜態庫和動態庫的區別:首先,可以肯定的是靜態庫浪費空間,動態庫浪費時間。靜態庫在程式編譯時會被鏈結(拷貝)到目標**中,程式執行時將不在需要該靜態庫。但是當動態庫在程式編譯時並不會被鏈結到目標**中,而是在程式執行時才被載入(指標),因此在程式執行時還需要動態庫的存在。

無論靜態庫還是動態庫都是由  .o檔案建立的,當靜態庫和動態庫同名時,gcc 命令優先選擇動態庫。

linux建立靜態庫和動態庫

2015新年第一篇部落格,哈哈,這個2月還沒寫過部落格呢,從現在開始繼續!一 建立靜態庫 在本例中將建立乙個小型靜態函式庫libfoo,包含兩個函式bill fred 1 編輯兩個檔案bill.c和fred.c bill.c include void bill fred.c include void...

靜態庫和動態庫的建立

最近學習了一下靜態庫和動態庫的建立,這裡是我學習後知道的建立方法,在這裡和大家分享以下,如果有不同意見或者更好的建議希望大家批評指正 首先我們先來說以下靜態庫和動態庫 1.靜態庫 首先靜態庫的名字是以.s為字尾來命名的,靜態庫的作用是在函式的呼叫過程中將庫中的所有東西拷貝到目標 所在的檔案中,所以它...

靜態庫和動態庫的建立

靜態庫的建立步驟 1 編輯要生成的庫檔案 vim add.c 在這裡實現a b的功能 2 將庫檔案編譯成目標檔案.ogcc c add.c o add.o 3 將目標檔案生成靜態庫ar rcs libadd.a add.o lib是字首,add.a是想要生成的靜態庫的名字 以上已經建立好了靜態庫。4...