gpt4 book ai didi

c - 当使用 NASM extern 语句访问 printf 时,GCC 输出错误 "undefined reference to ` printf'"

转载 作者:太空狗 更新时间:2023-10-29 17:12:42 26 4
gpt4 key购买 nike

我正在学习 NASM 并试图编译这段代码(我找到了 here)。它使用这个 NASM 命令进行组装:

nasm -f coff -l printf.lst  printf1.asm

printf.o 但是这个 gcc 链接命令:

gcc -o printf1  printf1.o

因错误而失败:

printf1.o:printf1.asm:(.text+0x1a): undefined reference to `printf'
collect2: ld returned 1 exit status

我做错了什么?提前致谢。 (编辑:我在 Windows 7 上);

; printf1.asm   print an integer from storage and from a register
; Assemble: nasm -f coff -l printf.lst printf1.asm
; Link: gcc -o printf1 printf1.o
; Run: printf1
; Output: a=5, eax=7

; Equivalent C code
; /* printf1.c print an int and an expression */
; #include
; int main()
; {
; int a=5;
; printf("a=%d, eax=%d\n", a, a+2);
; return 0;
; }

; Declare some external functions
;
extern printf ; the C function, to be called

section .data ; Data section, initialized variables

a: dd 5 ; int a=5;
fmt: db "a=%d, eax=%d", 10, 0 ; The printf format, "\n",'0'


section .text ; Code section.

global _main ; the standard gcc entry point
_main: ; the program label for the entry point
push ebp ; set up stack frame
mov ebp,esp

mov eax, [a] ; put a from store into register
add eax, 2 ; a+2
push eax ; value of a+2
push dword [a] ; value of variable a
push dword fmt ; address of ctrl string
call printf ; Call C function
add esp, 12 ; pop stack 3 push times 4 bytes

mov esp, ebp ; takedown stack frame
pop ebp ; same as "leave" op

mov eax,0 ; normal, no error, return value
ret ; return

最佳答案

我相信您需要使 _printf 符合 C 调用约定(就像您使用 _main 而不是 main 一样)。

关于c - 当使用 NASM extern 语句访问 printf 时,GCC 输出错误 "undefined reference to ` printf'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1942690/

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