首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ld不链接as生成的目标文件

ld不链接as生成的目标文件
EN

Stack Overflow用户
提问于 2020-10-13 05:06:31
回答 1查看 48关注 0票数 1

我已经用C写了一个Hello World程序,我使用命令gcc -S -o hello.s hello.c (代码在hello.c中)来生成汇编,然后使用as来汇编它。最后,我使用ld链接了目标代码,但它给了我以下错误:

代码语言:javascript
复制
ld: a.out:hello.c:(.text+0xa): undefined reference to `__main'
ld: a.out:hello.c:(.text+0x16): undefined reference to `puts'

C代码如下:

代码语言:javascript
复制
#include <stdio.h>
int main(void) {
    printf("Hello world!\n");
} 

我使用英特尔酷睿i3处理器,并使用MinGW进行编译。我的操作系统是Windows 7。

这是生成的程序集:

代码语言:javascript
复制
    .file   "hello.c"
    .text
    .def    ___main;    .scl    2;  .type   32; .endef
    .section .rdata,"dr"
LC0:
    .ascii "Hello world!\0"
    .text
    .globl  _main
    .def    _main;  .scl    2;  .type   32; .endef
_main:
LFB13:
    .cfi_startproc
    pushl   %ebp
    .cfi_def_cfa_offset 8
    .cfi_offset 5, -8
    movl    %esp, %ebp
    .cfi_def_cfa_register 5
    andl    $-16, %esp
    subl    $16, %esp
    call    ___main
    movl    $LC0, (%esp)
    call    _puts
    movl    $0, %eax
    leave
    .cfi_restore 5
    .cfi_def_cfa 4, 4
    ret
    .cfi_endproc
LFE13:
    .ident  "GCC: (MinGW.org GCC Build-2) 9.2.0"
    .def    _puts;  .scl    2;  .type   32; .endef
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-15 01:34:09

感谢Nate Eldredge帮我找到了答案。

要链接as生成的文件,请使用gcc -v (file)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64325336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档