linux 靜態庫,動態庫簡單使用示例

nm 命令可以看二進制文件的符號
預編譯 去掉宏 gcc -E hello.c -o hello.i
編譯 高級語言-->彙編  gcc -S hello.i
彙編 彙編-->目標文件  gcc -c hello.s
鏈接    gcc hello.o -o hello
.h 源碼頭文件
.c 預處理前的源碼
.i 預處理後的源碼
.s 彙編語言文件
.o 目標文件
.a 靜態庫
.so 共享庫
gcc [選項參數] 文件
-c 只編譯不鏈接
-o 指定輸出文件
-E 預編譯
-S 產生彙編
-Wall 產生儘可能多的警告
-pedantic 對不符合ANSI/ISO c語言標準的擴展語法產生警告
-Werror 將警告作爲錯誤處理
-x 指定源代碼語言 gcc -x c++ cpp.c -lstdc++
-g 生成調試信息
-D 定義宏  gcc -DVERSION=3
-o1/o2/o3  優化等級

gcc -I選項指定文件件附加搜索路徑
頭文件查找順序
#include <> -I目錄,系統目錄
#include "" -I目錄,當前目錄,系統目錄

## //連接宏內兩個連續的字符串  #define var(x) var##x   var(1)也就是var1
# //將宏參數擴展成字符串字面值 #define str(s) #s   printf(str(wang));

環境變量:
C_INCLUDE_PATH  - c頭文件的附加搜索路徑,相當於gcc的-I路徑
CPATH 與C_INCLUDE_PATH一樣
CPLUS_INCLUDE_PATH c++頭文件的附加搜索路徑

export CPATH=$CPATH:.
export含義保證當前shell的子進程可以使用這個環境變量(子進程繼承此
環境變量)。
shell中所啓動的任何進程都是shell的子進程
~/.bashrc或者~/.bash_profile

靜態庫
ar -r libxxx.a xxx.o ...
示例:
gcc -c calc.c
gcc -c show.c
ar -r libmath.o calc.o show.o
gcc main.c -lmain -L.
gcc main.c libmain.a也可以
-L指定庫搜索路徑,-l指定庫名
LIBRARY_PATH 庫的搜索路徑(給鏈接器gcc用的)
export LIBRARY_PATH=$LIBRARY_PATH:.
最一般方法:
gcc .c/.o -l<庫名> -L<庫路徑>

動態庫:
gcc -c -fpic xxx.c--> xxx.o
-fpic:位置無關代碼,可執行程序加載它們時,可將其映射到其地址空間的
任何位置。
gcc -shared xxx.o xxx.o -o libmath.so
gcc main.c -lmath -L.   注:默認先找共享庫

LD_LIBRARY_PATH:共享庫加載時候的路徑(給加載器用的)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章