Ubuntuを使用して簡単なカーネルを作成しようとしています。ターミナルで入力した
ld -Ttext 0x1000 -o kernel.bin loader.o main.o Video.o
しかし、次のエラーメッセージが返されました。
ld: i386 architecture of input file `loader.o' is incompatible with i386:x86-64 output
ld: warning: cannot find entry symbol _start; defaulting to 0000000000001000
ファイルを32ビットとしてコンパイルする場合は、次を使用できます。
ld -m elf_i386 -s -o file file.o
ローダーに32ビットではなく64ビットを使用し、次のコマンドでコンパイルします。
nasm -f elf64 loader.asm -o loader.o
これでエラーが解決するはずです
X86_64で32ビットアプリをコンパイル/リンクするときに、エミュレーションをelf_i386
に設定すると、正しいelf形式が提供されます。したがって、たとえば、nasm -f elf file.asm -o file.o
を使用してアセンブラアプリをコンパイルする場合、リンクコマンドはld -m elf_i386 -o exename file.o
です礼儀:デビッド