51

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
4

4 に答える 4

68

ファイルを 32 ビットとしてコンパイルする場合は、次を使用できます。

ld -m elf_i386 -s -o file file.o
于 2014-06-17T00:49:21.277 に答える
47

ローダーに 32 ビットではなく 64 ビットを使用し、次のコマンドでコンパイルします。

nasm -f elf64 loader.asm -o loader.o

これでエラーが解決するはずです

于 2014-01-02T10:57:24.807 に答える
6

x86_64 で 32 ビット アプリをコンパイル/リンクする場合、エミュレーションを に設定するとelf_i386、正しい elf 形式が提供されます。たとえば、アセンブラ アプリを でコンパイルする場合nasm -f elf file.asm -o file.o、リンク コマンドは次のようになりますld -m elf_i386 -o exename file.o

于 2015-02-18T07:18:18.823 に答える