gcc命令引數:
-ofilename
指定輸入檔案的檔名;
-c
只輸出.o檔案;
-ipath
指定.c檔案中include檔案的路徑;
-e
只預編譯;
例:# gcc –e –i. –o su.i su.c(將預編譯輸出到su.i檔案)
# gcc –c –o su.o su.i(生成su.o檔案)
-lpath
指定庫檔案路徑;
-llibname
指定庫檔案的名字,比如「lib*.a」,libname取「*」部分;
靜態庫製作方法:
# ar cru libcoreutils.a allocsa.o fprintftime.o 。。。
從靜態庫中刪除.o檔案:
# ar –d libcoreutils.a allocsa.o。。。
動態庫製作方法:
# gcc -shared -fpic -o libhello.so hello.o
編譯時指定動態庫匯出函式:
# gcc -shared -fpic -wl,--version-script=export.map -llib -o libchk.so check.o -lcoreutils -lcrypt
其中export.map內容如下:
;則check函式為匯出函式。
檢視庫或.o檔案中包含的符號(函式名稱):
# nm libcoreutils.a
nm命令的輸出包含三個部分:
1、符號值。預設顯示十六進製制,也可以指定;
2、符號型別。小寫表示是本地符號,大寫表示全域性符號(external);
3、符號名稱。如:
00000440 t _init
u abort@@glibc_2.0
00000490 t call_gmon_start
u calloc@@glibc_2.0
00000641 t check
00001ba0 b completed.5766
0000057c t correct_password
u crypt@@glibc_2.0
u dcgettext@@glibc_2.0
其中符號名稱的含義:
a符號值是絕對的。在進一步的連線中,不會被改變。
b符號位於未初始化資料段(known as bss)。
c共用(common)符號。共用符號是未初始化的資料。在連線時,多個共用符號可能採用乙個同樣的名字,如果這個符號在某個地方被定義,共用符號被認為是未定義的引用。
d已初始化資料段的符號。
g已初始化資料段中的小目標(small objective)符號。一些目標檔案格式允許更有效的訪問小目標資料,比如乙個全域性的int變數相對於乙個大的全域性陣列。
i其他符號的直接應用,這是gnu擴充套件的,很少用了。
n除錯符號。
r唯讀資料段符號。
s未初始化資料段中的小目標(small object)符號。
t**段的符號。
u未定義符號。
v弱物件(weak object)符號。當乙個已定義的弱符號被連線到乙個普通定義符號,普通定義符號可以正常使用,當乙個未定義的弱物件被連線到乙個未定義的符號,弱符號的值為0。
w乙個沒有被指定乙個弱物件符號的弱符號(weak symbol)。
- a.out目標檔案中的刺符號(stabs symbol)。這種情況下,列印的下乙個值是其他字段,描述字段,和型別。刺符號用於保留除錯資訊。
?未知符號型別,或者目標檔案特有的符號型別。
檢視庫或.o檔案中包含的外部符號:
# nm -g libcrypt.so
Linux命令概錄
檔案處理命令 1 ls 英文list 功能 顯示目錄,語法 1 ls a 檔案或目錄 功能 顯示所有檔案,包括隱藏檔案,2 ls l 檔案或目錄 功能 詳細資訊顯示 3 ls d 檔案或目錄 功能 檢視目錄屬性 2 cd 英文 change directory 功能 切換目錄 語法 cd 目錄 3 ...
每天學一點Linux系列 Linux基本概念
您也可以在本人的個人部落格中檢視 albog anderson s blog 001 linux核心 kernel linux系統的核心稱為核心,核心控制計算機上的所有硬體和軟體,在必要的時候分配硬體,使用軟體。002 交換空間 swap space linux的記憶體管理需要使用硬碟空間,這個空間...
linux核心編譯kernel編譯
核心編譯的簡單流程 1.先uname r查詢當前系統的kernel版本 3.切換至解壓後的原始碼目錄下,sudo i 進入root模式 4.apt get install libncurses dev,安裝 make menuconfig時需要用到的庫檔案 5.執行make menuconfig,選...