linux編譯扼概

2021-06-01 19:28:02 字數 2178 閱讀 3274

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,選...