【发布时间】:2016-06-14 22:39:12
【问题描述】:
下面的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
clang 也有同样的行为。
【问题讨论】:
-
首先要注意的是,这是一个 linker 错误——这并不意味着它无法编译。
-
@Dmitri 是的,我会修改标题。
-
-lgcc必须放在最后。 Gcc 在遇到库时处理它们,因此它们仅用于从前面提到的对象中解析符号。 -
你认为是为什么?链接可能需要它,但编译不需要它!即使是后者也不需要。
-
this answer 会回答您的问题吗?如果是这样,我会将您的问题作为重复项关闭。如果不是,则可能有助于突出您问题中的不同之处。
标签: c gcc linker clang static-libraries