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)圖大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)這些選項(xiàng)都可以和 -o 搭配使用,給輸出的文件重新命名而不使用 gcc 默認(rèn)的文件名( xxx.c、 xxx.s 、 xxx.o 和 a.out ),例如 gcc main.o -o main 將 main.o 鏈接成可執(zhí)行文件 main 。

如果我們