默认情况下,如何确定gcc将哪些命令行选项传递给ld?

考虑一下hello world C程序:

#include "stdio.h"

int main()

{

printf("Hello, World!\n");

}

如果我打电话给:

$ gcc -c hello.c -o hello.o

它将产生一个ELF可重定位文件

如果我再致电:

$ gcc hello.o -o hello            [1]

它将hello.o与ld链接,并产生一个ELF可执行文件

但是,如果我直接调用ld [2]而不是[1]

$ ld hello.o -o hello             [2]

我得到这些错误:

/usr/bin/ld.bfd.real: warning: cannot find entry symbol _start

test.c:(.text+0xa): undefined reference to `puts'

gcc必须将其他选项传递给ld(例如,链接C库)。

无论如何,有没有确切确定命令行gcc传递给ld in命令的信息[1]

回答:

是的,您可以gcc -v hello.o -o

hello用来获取链接线。对于您在ubuntu机器上的示例,我得到以下链接行(为便于阅读,已编辑为多行):

/usr/lib/gcc/x86_64-linux-gnu/4.4.5/collect2

--build-id

--eh-frame-hdr

-m elf_x86_64

--hash-style=gnu

-dynamic-linker

/lib64/ld-linux-x86-64.so.2

-o hello

-z relro

/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crt1.o

/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crti.o

/usr/lib/gcc/x86_64-linux-gnu/4.4.5/crtbegin.o

-L/usr/lib/gcc/x86_64-linux-gnu/4.4.5

-L/usr/lib/gcc/x86_64-linux-gnu/4.4.5

-L/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib

-L/lib/../lib

-L/usr/lib/../lib

-L/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../.. -L/usr/lib/x86_64-linux-gnu

hello.o

-lgcc

--as-needed -lgcc_s --no-as-needed

-lc

-lgcc

--as-needed -lgcc_s --no-as-needed

/usr/lib/gcc/x86_64-linux-gnu/4.4.5/crtend.o

/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crtn.o

请注意,这collect2只是的别名ld

以上是 默认情况下,如何确定gcc将哪些命令行选项传递给ld? 的全部内容, 来源链接: utcz.com/qa/421746.html

回到顶部