web-dev-qa-db-ja.com

i386入力ファイルのアーキテクチャはi386:x86-64と互換性がありません

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
29
MEv2.0

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

ld -m elf_i386 -s -o file file.o
39
Leandro Andrade

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

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

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

30
Drill

X86_64で32ビットアプリをコンパイル/リンクするときに、エミュレーションをelf_i386に設定すると、正しいelf形式が提供されます。したがって、たとえば、nasm -f elf file.asm -o file.oを使用してアセンブラアプリをコンパイルする場合、リンクコマンドはld -m elf_i386 -o exename file.oです礼儀:デビッド

5
4aRk Kn1gh7