main函數(shù)和啟動(dòng)例程
當(dāng)內(nèi)核使用一個(gè)exec函數(shù)執(zhí)行C程序時(shí),在調(diào)用main函數(shù)之前先調(diào)用一個(gè)特殊的啟動(dòng)例程,可執(zhí)行程序?qū)⒋死讨付槌绦虻钠鹗嫉刂?。啟?dòng)例程從內(nèi)核獲取命令行參數(shù)和環(huán)境變量,然后為調(diào)用main函數(shù)做好準(zhǔn)備。
我們常用gcc main.c -o main
命令編譯一個(gè)程序,其實(shí)也可以分三步做,第一步生成匯編代碼,第二步生成目標(biāo)文件,第三步生成可執(zhí)行文件:
1 $ gcc -S main.c2 $ gcc -c main.s3 $ gcc main.o
-S
選項(xiàng)生成匯編代碼, -c
選項(xiàng)生成目標(biāo)文件,此外 -E
選項(xiàng)只做預(yù)處理而不編譯,如果不加這些選項(xiàng)則 gcc
執(zhí)行完整的編譯步驟,直到最后鏈接生成可執(zhí)行文件為止。gcc命令的選項(xiàng)圖這些選項(xiàng)都可以和 -o
搭配使用,給輸出的文件重新命名而不使用 gcc
默認(rèn)的文件名( xxx.c
、 xxx.s
、 xxx.o
和 a.out
),例如 gcc main.o -o main
將 main.o
鏈接成可執(zhí)行文件 main
。
如果我們