gpt4 book ai didi

windows - ld MinGW 链接到标准 C 库

转载 作者:可可西里 更新时间:2023-11-01 09:55:13 25 4
gpt4 key购买 nike

我对以下代码有疑问。

extern printf
global _main
main:
push msg
call printf
ret
msg db "Hello world",0

我使用 nasm -fwin32 test.asm 将它与 NASM 组装起来,然后我使用 ld test.obj 链接它。它告诉我“test.obj:test.asm:(text+0x6): undefined reference to 'printf'

如何将我的文件链接到标准 C 库?我有来自最新 MinGW 的 ld。

最佳答案

汇编代码:

nasm -fwin32 test.asm

Microsoft 将在使用 cdecl 调用约定的函数前加上下划线。
为了符合 C 调用约定 printf 应该是 _printf
这同样适用于 _main 而不是 main

并链接到:

ld test.obj -lmsvcrt -entry=_main -subsystem=console -o test.exe

此处-entry命令行选项用于调用ld指定程序的入口点。
然后使用 -l 选项将 msvcrt 库传递给 ld 链接器,否则你会得到一个错误信息,(undefined reference to `printf') 这意味着链接器在 NASM 生成的指定目标文件中没有找到符号 printf。

这是完整的源代码:

global  _main
extern _printf
section .text
_main:
push msg
call _printf
add esp, 4 ;adjust the stack
ret
msg db "Hello world",0

关于windows - ld MinGW 链接到标准 C 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18804743/

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