2013-10-05 16 views
15

ile uyumsuz Ubuntu kullanarak basit bir çekirdek oluşturmaya çalışıyorum. terminalde beni386 giriş dosyasının mimarisi, i386: x86-64

ld -Ttext 0x1000 -o kernel.bin loader.o main.o Video.o 

daktilo Ama karşılığında aşağıdaki hata iletisi aldım:

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 

cevap

20

Kullanım 64 bit yerine yükleyicinizin için 32 ve aşağıdaki komutu ile derlemek:

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

Bu hata sizin sorununuz çözülüyor

22

Dosyayı derlemek istiyorsanız Dosyayı derleyin 32 bit kompozisyon olarak şunları kullanabilirsiniz:

+4

Bu çözümdü. X86_64'teki 32 bit uygulamaları derlerken/bağladığınızda, öykünmeyi "elf_i386" olarak ayarlamak, doğru elf biçimini sağlar. Örneğin, bir assembler uygulamasını "nasm -f elf file.asm -o file.o" ile derlerseniz, link komutu 'ld -m elf_i386 -o exename file.o'dur. –

+1

Sadece -o file.o dosyasını '-o file file.o' ile değiştirmeyi unutmayın. – Ruslan

2

elf_i386 için öykünme ayarı x86_64'lerde 32 bit uygulamalar bağlama/derleme doğru elf format sağlar

ld -m elf_i386 -s -o file.o dosyası. Örneğin, nasm -f elf file.asm -o file.o ile bir assembler uygulaması derlerseniz, bağlantı komutu ld -m elf_i386 -o exename file.o nezaket: David