質問: gccを使って32ビットのプログラムをしています。 main.cとsu.asmでできたプログラムをくっつけてます su.asmはスタートアップルーチンでそっからmain.cの 中のmain()を呼び出してます。すると・・・ C:\JO>make gcc -fno-builtin -nostdlib -ffreestanding -nostartfiles -nodefaultlibs -march=i486 -c main.c nasm -f win32 su.asm -o su.o -l su.lst ld -o os.obj -Map mapfile.txt -T ld.scr su.o main.o main.o(.text+0x21):main.c: undefined reference to `_alloca' main.o(.text+0x26):main.c: undefined reference to `__main' make: *** [os.obj] Error 1
回答: 質問文はcopy&pasteですか?目で見て打ち込まれましたか? __mainのほうで,アンダーラインが2文字連続で出てるのがちょっと引っかかります.本当にアンダーライン2個の __mainがエラーメッセージに出てるのだとすると, main.cのなかで _mainを参照している.コンパイルの結果それは__mainに変換(先頭のアンダーラインを追加)され,どこにもそれが定義されていないのでエラーになっている.と想像されます.