他們說,main()是一個像任何其他函數的功能,但「標記」作爲二進制內的入口點,操作系統可能會找到(不知道如何)並從那裏啓動程序。所以,我試圖找出更多關於這個功能。我做了什麼?我創建了這個代碼中一個簡單的.C文件:試圖瞭解與GCC和Windows的主要功能
int main(int argc, char **argv) {
return (0);
}
我保存的文件,安裝GCC編譯器(在Windows,MingW平臺環境),並創建一個批處理文件是這樣的:
gcc -c test.c -nostartfiles -nodefaultlibs -nostdlib -nostdinc -o test.o
gcc -o test.exe -nostartfiles -nodefaultlibs -nostdlib -nostdinc -s -O2 test.o
@%comspec%
我這樣做是爲了獲得一個非常簡單的編譯器和鏈接器,沒有庫,沒有頭,只是編譯器。因此,編譯順利,但鏈接與此錯誤停止:
test.c:(.text+0xa): undefined reference to '___main'
collect2.exe: error: Id returned 1 exit status
我認爲,主要功能是通過鏈接器出口,但我相信,你並不需要與有關它的任何信息庫。但它看起來像它。在我的情況下,我認爲它必須是標準的GCC庫,所以我下載了它的源代碼並打開了這個文件:libgcc2.c 現在,我不知道這是否是主函數構建爲由GCC鏈接。事實上,我不明白海灣合作委員會如何使用主要功能。爲什麼鏈接器需要gcc標準庫? 要知道main?我希望這能讓我的問題更具體和明確。謝謝!
你能從你的windows上運行'nm test.o'嗎?它會告訴你'test.o'中包含的符號 – Eregrith
是的,有一個'___main'和'_main'符號(這很奇怪) – ali