gpt4 book ai didi

c - 如何正确链接 *.asm 文件?

转载 作者:太空宇宙 更新时间:2023-11-04 01:30:18 25 4
gpt4 key购买 nike

我已经开始学习汇编语言,目前正在编写一个简单的 asm 程序来在 stdio.h 中调用 C 中的 printf 函数。
组装后我无法正确链接目标文件。我面临的问题是

undefined reference to printf

在SO上浏览了其他有类似问题的问题后,尝试了

nasm -f elf -l call.lst call.asm  
gcc -o call call.o

执行此操作后,出现错误:

i386 architecture of input file call.o is compatible with x86_64 output.

我应该如何正确链接文件?目前,我正在做以下事情:-

nasm -f elf call.asm
ld -m elf_i386 -s -o call call.o

我应该对上面的行做哪些修改?

最佳答案

如果您正在编写 32 位汇编代码,您需要告诉 GCC:

$ gcc -m32 -o call call.o

或者,如果您正在编写 64 位汇编(使用 [BITS 64]),那么您将:

$ nasm -f elf64 -l call.lst call.asm
$ gcc -m64 -o call call.o

这对我有用:

测试.s

[位 32]

extern printf

global main
main:
push message
call printf
add esp, 4
xor eax, eax
ret

message:
db "hello",0xA,0

构建

nasm -f elf test.s
gcc -m32 -o calltest test.o
./calltest

关于c - 如何正确链接 *.asm 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23852627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com