2013-10-05 121 views
15

私はUbuntuを使って簡単なカーネルを作成しようとしています。ターミナルでは、私はi386入力ファイルのアーキテクチャはi386と互換性がありません:x86-64

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 

答えて

20

使用64ビットの代わりに、あなたのローダーの32、次のコマンドでコンパイル:

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

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

22

ファイルをコンパイルする場合は32ビットの組成物として、使用することができる:

+4

これは解決策でした。 x86_64上で32ビットアプリケーションをコンパイル/リンクする場合、エミュレーションを 'elf_i386'に設定すると正しいelfフォーマットが得られます。たとえば、 'nasm -f elf file.asm -o file.o'を使ってアセンブラアプリケーションをコンパイルすると、リンクコマンドは' ld -m elf_i386 -o exename file.o'になります。 –

+1

'-o file.o file'を' -o file file.o'に置き換えることを忘れないでください。 – Ruslan

2

elf_i386にエミュレーション設定、x86_64の上で32ビットアプリケーションをリンク/コンパイル正しいELFフォーマットを提供

LD -m elf_i386 -s -o file.oファイル。例えば、nasm -f elf file.asm -o file.oでアセンブラアプリケーションをコンパイルすると、リンクコマンドはld -m elf_i386 -o exename file.o です。謝辞:David

関連する問題