代码之家  ›  专栏  ›  技术社区  ›  Trevor Hickey

为什么链接程序需要stdlib?[副本]

  •  4
  • Trevor Hickey  · 技术社区  · 8 年前

    采用以下C程序:

    int main(){}
    

    它没有使用C标准库中的任何内容。
    我想我们可以通过 -nostdlib .

    但是,这会导致以下错误:

    $ gcc -nostdlib -o main main.c
    /usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 0000000000400150
    

    有人能澄清一下 _start 符号是,谁负责提供它?
    如何使用 -nostdlib ?


    据医生介绍,我还尝试过:

    $ gcc -nostdlib -o main main.c -lgcc
    

    在叮当声中也可以看到同样的行为。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Community CDub    7 年前

    _start 是程序的入口点,cf。 this answer libc包含一个小存根,它从操作系统放置参数的地方读取命令行参数,然后调用 main 因此,为了在正常平台上运行正常的C程序,需要链接libc。

    您可以尝试在没有libc的情况下编写程序,但必须提供自己的程序 _开始 。虽然你不能做很多事情,但你甚至不能返回,因为你什么也没有返回。你唯一的选择是使用assembly刻苦地重新创建你需要的libc部分,比如 _exit 作用