Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly ld不链接as生成的对象文件_Assembly_Gcc_X86_Mingw_Ld - Fatal编程技术网

Assembly ld不链接as生成的对象文件

Assembly ld不链接as生成的对象文件,assembly,gcc,x86,mingw,ld,Assembly,Gcc,X86,Mingw,Ld,我已经用C编写了一个Hello World程序。我使用命令gcc-S-o Hello.S Hello.C(代码在Hello.C中)来生成程序集,然后使用as来组装它。最后,我使用ld链接了目标代码,但它给了我以下错误: ld: a.out:hello.c:(.text+0xa): undefined reference to `__main' ld: a.out:hello.c:(.text+0x16): undefined reference to `puts' C代码如下: #includ

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

ld: a.out:hello.c:(.text+0xa): undefined reference to `__main'
ld: a.out:hello.c:(.text+0x16): undefined reference to `puts'
C代码如下:

#include <stdio.h>
int main(void) {
    printf("Hello world!\n");
} 


谢谢内特·埃尔德雷奇帮我找到答案


要将
生成的文件链接为
,请使用
gcc-v(文件)
,感谢Nate Eldredge帮助我获得答案


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

如果您希望
main
printf
正常工作,您还需要系统的C库,而不仅仅是
libgcc
。如果使用
gcc-v
链接,您将看到运行的完整gory
ld
命令。对于任何给定的程序,您可能不需要所有这些,但您至少需要了解它们的作用以及哪些部分是必需的。
\uuuuuu main
(C name
\uuuuu main
)是MinGW如何初始化其libc的,而不是使用动态链接器钩子让代码在
main
之前(甚至在
\u start
之前)运行,就像glibc在GNU/Linux上所做的那样。如果您想要
main
printf
工作,那么您还需要系统的C库,而不仅仅是
libgcc
。如果使用
gcc-v
链接,您将看到运行的完整gory
ld
命令。对于任何给定的程序,您可能不需要所有这些,但您至少需要了解它们的作用以及哪些部分是必需的。
\uuuuuu main
(C name
\uuuuu main
)是MinGW如何初始化其libc的,而不是使用动态链接器钩子让代码在
main
之前(甚至在
\u start
之前)运行,就像glibc在GNU/Linux上所做的那样。
    .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