ファイルにリンクしようとしています-メイン関数を含むacファイルと、単にメインにジャンプするasmファイル。
mingwをインストールしました。私のファイル:
//kernel.c
void some_function(){
}
void main(){
char* video_memory = (char*) 0xb8000;
*video_memory = 'X';
some_function();
}
;kernel_entry.asm
[bits 32]
[extern main]
call main
jmp $
ビルドするために呼び出すコマンド:
gcc -ffreestanding -c kernel.c -o kernel.o
nasm kernel_entry.asm -f elf -o kernel_entry.o
ld -o kernel.bin -Ttext 0x1000 kernel_entry.o kernel.o
私が得ているエラー:
kernel_entry.o:(.text+0x1): undefined reference to `main'
kernel.o:kernel.c:(.text+0xf): undefined reference to `__main'
編集:
どのコマンドが機能しますか:
ld -r -o kernel.out -Ttext 0x1000 kernel.o
objcopy -O binary -j .text kernel.out kernel.bin
-ri を指定して ld を実行しようとすると、エラーが発生します。
ld: Relocatable linking with relocations from format elf32-i386 (kernel_entry.o)
to format pe-i386 (kernel.bin) is not supported
EDIT2:これらのコマンドを使用すると、最良の結果が得られました。
gcc -ffreestanding -c kernel.c -o kernel.o
nasm kernel_entry.asm -f win32 -o kernel_entry.o
ld -r -o kernel.out -Ttext 0x1000 kernel_entry.o kernel.o
objcopy -O binary -j .text kernel.out kernel.bin
ファイルは正常にリンクされましたが、実行時にメインが呼び出されません。coff 形式でも試してみましたが、リンクもしますが、Bochs は再起動し続けます。