Tôi đã đọc this bài viết, và tại một thời điểm nó mang lại cho tôi chương trình NASM này:NASM/vấn đề gcc trên 64-bit Mac OS X Lion
; tiny.asm
BITS 32
GLOBAL main
SECTION .text
main:
mov eax, 42
ret
Và nói với tôi để chạy các lệnh sau:
$ nasm -f elf tiny.asm
$ gcc -Wall -s tiny.o
tôi đã nhận lỗi sau:
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
tôi mạo hiểm một đoán những gì có thể là vấn đề, và thay đổi dòng BITS để đọc:
BITS 64
Nhưng sau đó khi tôi chạy nasm -f elf tiny.asm
tôi nhận được:
tiny.asm:2: error: `64' is not a valid segment size; must be 16 or 32
Làm thế nào để thay đổi mã để làm việc trên máy tính của tôi?
Chỉnh sửa:
Tôi lấy lời khuyên của Alex từ các nhận xét và tải xuống phiên bản mới hơn. Tuy nhiên,
./nasm-2.09.10/nasm -f elf tiny.asm
phàn nàn
tiny.asm:2: error: elf32 output format does not support 64-bit code
Mặt khác,
./nasm-2.09.10/nasm -f elf64 tiny.asm
gcc -Wall -s tiny.o
phàn nàn
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
Kiểm tra xem bạn có co thắt mới nhất hay không và thử '-f elf64'. –
@Alex elf64 đã cho tôi "định dạng đầu ra không được công nhận". Đối với phiên bản, nasm -v đã cho tôi "phiên bản NASM 0.98.40 (Apple Computer, Inc. build 11) được biên soạn vào ngày 3 tháng 11 năm 2011" 0.98 có vẻ như nó có thể là một phiên bản cũ nhưng nó đã được biên soạn vào năm 2011 vì vậy nó không thể là quyền cũ? Tại sao Apple lại xuất xưởng phần mềm lỗi thời? Trình kết hợp mặc định không thể tập hợp mã 64 bit trên nền tảng 64 bit? – math4tots
Bạn đã quá lỗi thời. Bản in của tôi "NASM phiên bản 2.09.10 được biên soạn vào ngày 15 tháng 7 năm 2011". Phiên bản mới hơn là [ở đây] (http://www.nasm.us/pub/nasm/releasebuilds/2.09.10/). –