c Linux gcc編譯 靜態庫 動態庫

2021-10-04 13:31:56 字數 1035 閱讀 9781

預處理 --> ( * .i) 編譯 -->( * .s彙編檔案) 彙編–>( * .o二進位制機器碼) 鏈結–>可執行檔案

預處理:預處理器將原始檔對應的巨集展開 gcc -e test.c -o test.i

編 譯:gcc將c檔案編譯成彙編檔案 gcc -s test.i -o test.s

匯 編:利用as命令(彙編器)將彙編檔案編譯成機器碼(二進位制) as test.s -o test.o

windows:靜態庫( * .lib) 動態庫( * .dll)

linux :靜態庫( * .a)動態庫( * .so)

動態庫只在執行時才被鏈結使用,不是直接編譯為可執行檔案,並且乙個動態庫可以被多個

程式使用,故可稱為共享庫

靜態庫將會整合到程式中,在程式執行時不用載入靜態庫。

因此,靜態庫會使你的程式臃腫並且難以公升級,但比較容易部署。而動態庫會使你的程式輕

便易於公升級但難以部署

如果在編譯時,某個程式鏈結靜態庫,則鏈結器會搜尋庫並直接拷入可執行檔案中(利於部署,但過於臃腫);對於動態庫,在編譯時並不會被鏈結到**中,而是在執行時才會被載入(不利於部署,但程式輕便)

gcc -c add.c 

ar crsv libadd.a add.o

gcc -o add.exe testadd.c -ladd -l.

//-l.為設定為當前路徑,也可直接將.a檔案複製到 /usr/local/lib目錄下)

gcc -fpic -wall -c add.c

gcc -shared -o libadd.so add.o

sudo cp libadd.so /usr/local/lib //當做好動態庫後,要把動態庫移到 /usr/local/lib,再執行以下命令

sudo ldconfig //該命令會更新/etc/ld.so.cache的內容,將新加入的庫路徑寫入其中,這樣,可執行程式就可以在執行時找到動態庫

gcc -o add.exe testadd.c -ladd

編譯靜態庫編譯動態庫

編譯靜態庫 cr標誌告訴ar將object檔案封裝 archive 我們可以使用nm s 命令來檢視.a檔案的內容 ar cr libmyhello.a hello.o 或 cvr 編譯動態庫 gcc c fpic test1.c gcc c fpic test2.c fpic告訴gcc將源 編譯成...

Qt編譯生成靜態庫(靜態編譯)

開發環境 vs2008 qt4.8.4原始碼庫 其他環境請自己嘗試,原理應該是差不多的 qt編譯生成靜態庫1.本教程只針對在win32平台,使用vs開發工具 例子以vs2008為例 2.3.解壓qt源 到目標目錄,如 4.開啟 mkspecs 目錄,找到目標平台的資料夾,如 win32 msvc20...

靜態庫 a編譯和靜態庫 a合併

第一步 生成test.o目標檔案,使用gcc c test.c o test.o命令。第二步 使用ar將test.o打包成libtest.a靜態庫,使用ar rcs o libtest.a test.o命令 第三步 生成libtest.a靜態庫後,可以使用命令ar t libtest.a檢視libt...