前面一課講了gcc的簡單入門,包括gcc編譯步驟:預處理;編譯;匯編;鏈接。今天這節課就來講下linux的庫也歡迎大家吐糟共同學習。
原理:linux系統中分為2種庫:靜態庫和共享庫。靜態庫是以.a后綴結尾的文件,通常是在編譯的鏈接階段指定靜態庫的位置進行編譯生成可執行文件,因此生成的可執行文件在執行的時候不需要靜態庫的參與。動態庫共享庫是以.so后綴結尾的文件,通常情況下代碼中有需要用到共享庫的地方在編譯鏈接階段指定共享庫的路徑在執行可執行文件的時候從內存表中讀取代碼,內存中只有一份所有程序共享,所以這個方式是要求共享庫必須參與如果運行時找不到是會報錯的。這2種庫系統都有默認的路徑一般都是/usr/lib/和/lib以及/usr/local/lib,這也要看具體的系統版本,也分32位和64位的路徑。下面就來具體實踐一下。
實踐:建立相關文件步驟如下:
1>建立calc.h文件,并輸入如下代碼:
#ifndef CALC_H#define CALC_Hdouble Add(double a,double b);#endif2>建立calc.c文件,并輸入如下代碼:
#include <stdio.h>#include "calc.h"double Add(double a,double b){ return a + b; }3>建立calcmain.c文件,并輸入如下代碼:
#include <stdio.h>#include "calc.h"int main(void){ double c = Add(2.0,3.0); PRintf("result:%f",c); return 0; }4-1>生成靜態庫執行,命令如下:
gcc -Wall calc.c -o calc.o gcc -Wall calcmain.c -o calcmain.oar rcs libcalc.a calc.o //使用ar命令生成靜態庫gcc -Wall calcmain.o libcalc.a -o calc //生成calc可執行文件,4-2>生成動態共享庫執行。命令如下:
//因為之前已經生成了calc.o以及calcmain.o 2個目標文件gcc -shared -fPIC calc.o -o libcalc.so //使用gcc生成共享庫,其中-shared:共享庫;-fPIC:與位置無關gcc -Wall calcmain.o -o calc -L. -lcalc //-L.:當前目錄搜索;-l:使用外部lib庫。export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH //指定臨時共享庫搜索路徑,上面的-L.參數經過實驗無效不知道為什么,共享庫搜索的路徑默認是不會搜索當前路徑的。
以上是這次實踐的相關步驟,其中在gcc編譯過程中是可以直接以源碼C文件生成目標文件的再次忽略掉了!這一課中靜態庫知識點相關比較少,現在的開發也比較少用。關于共享庫大家可以看看這邊博客文章多了解了解。
新聞熱點
疑難解答