今天是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...