You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用x86汇编编译.exe时出现‘undefined reference to printf’错误求助

解决汇编程序链接时undefined reference to printf的问题

错误原因

你遇到的链接错误是因为printf函数的实现不在你的汇编代码里,它属于C标准库,而你直接用ld链接时没有告诉链接器要链接这个库,所以链接器找不到该函数的定义。

解决方案

方案1:修改ld链接命令,手动添加依赖库

将原来的链接命令:

ld -m i386pe -o hello.exe hello.obj

替换为:

ld -m i386pe -o hello.exe hello.obj -lmsvcrt -lgcc
  • -lmsvcrt:链接微软C运行时库(msvcrt.dll对应的静态库),printf的实现就在这个库中
  • -lgcc:链接GCC支持库,为C标准库函数提供必要的底层支持

方案2:改用gcc链接(更简便,自动处理库依赖)

gcc会自动识别并链接所需的标准库,只需把ld命令换成:

gcc -m32 hello.obj -o hello.exe
  • -m32:指定生成32位程序,和你用nasm -f elf32编译的目标文件匹配

额外优化(可选)

如果用gcc链接,建议将程序入口从_start改为_main,因为C运行时会自动处理程序初始化和退出逻辑(比如调用exit),避免直接用_start可能导致的异常退出问题:
修改汇编代码:

extern _printf

section .text

global _main  ; 把_start改成_main

_main:  ; 入口点改为_main
    push ebp
    mov ebp, esp

    push msg
    call _printf
    add esp, 4

    leave
    ret

section .data
    msg     db  "Hello, world!", 13, 10, 0

之后再用上述gcc命令链接即可。

内容的提问来源于stack exchange,提问作者Chromegism

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:46:02