編譯這整個過程都只是在編譯你自己寫的代碼,直到鏈接才讓你的代碼和庫的代碼關聯(lián)起來,最終形成可執(zhí)行程序
源程序到可執(zhí)行程序的整個過程: ESc-iso
預處理四大任務:
頭文件展開
,去注釋
,宏替換
,條件編譯
gcc test.c -E -o test.i
-E:開始翻譯,并且在預處理后停下來
-o:指明形成臨時文件的名稱
通過這里我們可以看到預處理后還是C語言代碼,預處理完成的只是文本操作!
ps:這里不帶-o是不行的,程序停下來后會將預處理后的文件內容直接打印到終端
通過-o生成的.i文件我們可以清晰的看到頭文件展開后的結果是一堆函數(shù)和變量的聲明,并沒有函數(shù)的具體實現(xiàn)!
2.編譯
.h(頭文件)中只包含函數(shù)的聲明,函數(shù)的具體實現(xiàn)在標準庫里
頭文件存在的大意義:
1.提供函數(shù)的聲明
2.自動補全代碼
編譯是將C語言代碼翻譯成匯編代碼
gcc -S test.c -o test.s
3.匯編匯編是將匯編代碼翻譯成二進制代碼
gcc -c test.c -o test.o
匯編完成后得到二進制代碼,但是這并不能被執(zhí)行,因為編譯這整個過程都只是在編譯你自己寫的代碼,直到鏈接才讓你的代碼和庫的代碼關聯(lián)起來,最終形成可執(zhí)行程序.
二.(動靜態(tài))鏈接1.動態(tài)鏈接鏈接的目的:把自己寫的并且編譯好的二進制代碼和庫里的二進制代碼關聯(lián)起來,形成可執(zhí)行程序!
動態(tài)鏈接方式:在運行時需要去標準庫里找函數(shù)的實現(xiàn)
優(yōu)點:形成的可執(zhí)行程序體積小
缺點:依賴動態(tài)庫,易收到動態(tài)庫丟失等原因出現(xiàn)運行時錯誤!
gcc test.c -o test//Linux-默認是動態(tài)鏈接的鏈接方式
file 可執(zhí)行程序
ldd 可執(zhí)行程序
//在linux中, ldd是list dynamic dependencies的縮寫, 意思: 列出動態(tài)庫依賴關系
dynamically linked (uses shared libs)//動態(tài)鏈接方式(共享庫)
libc.so.6 =>/lib64/libc.so.6 (0x00007f86cd306000)//動態(tài)庫->位置(代碼地址)
2.靜態(tài)鏈接靜態(tài)鏈接方式:在鏈接時直接將函數(shù)的實現(xiàn)拷貝一份到我的程序中,運行時不用找!
優(yōu)點:不依賴第三方庫
缺點:形成的可執(zhí)行程序體積大
gcc test.c -o test -static//指明采用靜態(tài)鏈接的鏈接方式
file test
statically linked//靜態(tài)鏈接方式
3.靜態(tài)鏈接庫的下載安裝動態(tài)庫一般系統(tǒng)自帶,因為系統(tǒng)運行時需要用到動態(tài)庫
靜態(tài)庫在Linux中一般要自行安裝
sudo yum install glibc-static//安裝C靜態(tài)庫
sudo yum install libstdc++-static//安裝c++靜態(tài)庫
gcc test.c -o test -static//生成靜態(tài)程序test
4.windows下動靜態(tài)庫的后綴windows下動靜態(tài)庫的后綴:
動態(tài)庫:.dll
靜態(tài)庫:.lib
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁名稱:【Linux操作系統(tǒng)】程序的編譯和動靜態(tài)鏈接-創(chuàng)新互聯(lián)
本文URL:http://www.rwnh.cn/article48/copihp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供ChatGPT、用戶體驗、小程序開發(fā)、標簽優(yōu)化、建站公司、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容