2012-02-16 21 views
6

मैं this लेख, पढ़ रहा था और एक बिंदु पर यह मुझे इस एनएएसएम कार्यक्रम देता है:एनएएसएम/जीसीसी मुद्दा

; tiny.asm 
BITS 32 
GLOBAL main 
SECTION .text 
main: 
       mov  eax, 42 
       ret 

और निम्न कमांड को चलाने के लिए मुझसे कहता है:

ld: warning: option -s is obsolete and being ignored 
ld: warning: ignoring file tiny.o, file was built for unsupported file format which is not the architecture being linked (x86_64) 
Undefined symbols for architecture x86_64: 
    "_main", referenced from: 
     start in crt1.10.6.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 

मैं पर कोई अनुमान कदम:

$ nasm -f elf tiny.asm 
$ gcc -Wall -s tiny.o 

मैं निम्नलिखित त्रुटि मिली क्या समस्या हो सकती है, और पढ़ने के लिए बिट्स लाइन बदल:

BITS 64 

लेकिन तब जब मैं nasm -f elf tiny.asm चलाने मैं:

tiny.asm:2: error: `64' is not a valid segment size; must be 16 or 32 

मैं अपने मशीन पर काम करने के लिए कोड को कैसे संपादित कर

संपादित करें:

मैं टिप्पणियों से एलेक्स के सलाह मान ली और एक नए संस्करण डाउनलोड किया। हालांकि,

./nasm-2.09.10/nasm -f elf tiny.asm 

शिकायत

tiny.asm:2: error: elf32 output format does not support 64-bit code 

दूसरी ओर,

./nasm-2.09.10/nasm -f elf64 tiny.asm 
gcc -Wall -s tiny.o 

शिकायत

ld: warning: ignoring file tiny.o, file was built for unsupported file format which is not the architecture being linked (x86_64) 
Undefined symbols for architecture x86_64: 
    "_main", referenced from: 
     start in crt1.10.6.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 
+0

जांचें कि क्या आपके पास नवीनतम नस्ल है और '-f elf64' आज़माएं। –

+0

@Alex elf64 ने मुझे "अपरिचित आउटपुट प्रारूप" दिया। संस्करण के लिए, nasm -v ने मुझे "NASM संस्करण 0.98.40 (ऐप्पल कंप्यूटर, इंक बिल्ड 11) 3 नवंबर 2011 को संकलित किया" 0।98 ऐसा लगता है कि यह एक पुराना संस्करण हो सकता है लेकिन इसे 2011 में संकलित किया गया था, इसलिए यह पुराना अधिकार नहीं हो सकता है? ऐप्पल पुराने सॉफ्टवेयर क्यों शिप करेगा? एक डिफ़ॉल्ट असेंबलर जो 64-बिट प्लेटफ़ॉर्म पर 64-बिट कोड एकत्र नहीं कर सकता है? – math4tots

+0

आपका बहुत पुराना है। मेरा प्रिंट "NASM संस्करण 2.09.10 जुलाई 15 2011 को संकलित"। नया संस्करण [यहां] है (http://www.nasm.us/pub/nasm/releasebuilds/2.09.10/)। –

उत्तर

13

वहाँ ओएस एक्स-विशिष्ट समायोजन आप क्रम में करना है कर रहे हैं काम करने के लिए आपके उदाहरण के लिए: मुख्य विधि एक _ ओएस एक्स लिंकर द्वारा साथ prepended है:

; tiny.asm 
BITS 32 
GLOBAL _main 
SECTION .text 
_main: 
    mov  eax, 42 
    ret 

पीछे नहीं है आप मच फ़ाइल स्वरूप का उपयोग करने के लिए है कि:

nasm -f macho tiny.asm 

अब आप यह (लिंक कर सकते हैं का उपयोग कर - 32 बिट ऑब्जेक्ट फ़ाइल इंगित करने के लिए m32):

gcc -m32 tiny.o 
+1

+ 1'ed। पूरी तरह से भूल गया यह "मच" था। –

2

ऐसा लगता है कि आप अभी भी 32-बिट संस्करण का उपयोग कर रहे हैं। यदि आप nasm -hf पर macho64 सूचीबद्ध करना चाहिए। यदि नहीं, तो आपको दोबारा अपडेट करना होगा।

आप कंसोल brew update में कोशिश कर सकते हैं। यदि यह एक अद्यतन करता है तो brew search nasm जहां इसे nasm लाया जाना चाहिए। फिर बस brew install nasm। यह आपके कंप्यूटर पर नस्ल स्थापित करना चाहिए। सुनिश्चित करें कि उस स्थान को देखना सुनिश्चित करें जहां इसे इंस्टॉल किया गया था। मेरा /usr/local/cellar/nasm/2.11.02/bin/ पर स्थापित किया गया था। फिर nasm -hf टाइप करके इसे उपलब्ध प्रारूपों की एक सूची लेनी चाहिए जो आपको macho64 उपलब्ध देखना चाहिए।

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