2013-10-05 9 views
15

मैं उबंटू का उपयोग करके एक साधारण कर्नेल बनाने की कोशिश कर रहा हूं। टर्मिनल में मैं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 बिट संरचना के रूप में, आप का उपयोग कर सकते हैं:

ld -m elf_i386 -s -ओ file.o फ़ाइल

+4

यह समाधान था। X86_64 पर 32-बिट ऐप्स को संकलित/लिंक करते समय, 'elf_i386' पर अनुकरण सेट करने से सही एल्फ प्रारूप प्रदान किया जाता है। तो, उदाहरण के लिए, यदि आप 'nasm -f elf file.asm -o file.o' के साथ एक असेंबलर ऐप संकलित करते हैं, तो लिंक कमांड' ld -m elf_i386 -o exename file.o' है। –

+1

'-o file.o file' को' -o फ़ाइल फ़ाइल.ओ' 'से प्रतिस्थापित करना न भूलें। – Ruslan

2

/जब संकलन x86_64 पर 32-बिट क्षुधा को जोड़ने, elf_i386 के अनुकरण की स्थापना सही योगिनी प्रारूप प्रदान करता है। तो, उदाहरण के लिए, यदि आप nasm -f elf file.asm -o file.o के साथ एक असेंबलर ऐप संकलित करते हैं, तो लिंक कमांड ld -m elf_i386 -o exename file.o सौजन्य: डेविड

संबंधित मुद्दे