当前位置: 首页 > 面试题库 >

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

夔修伟
2023-03-14
问题内容

考虑一下hello world C程序:

hello.c

#include "stdio.h"

int main()
{
        printf("Hello, World!\n");
}

如果我打电话给:

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

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

如果我再致电:

$ gcc hello.o -o hello            [1]

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

但是,如果我直接调用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



 类似资料:
  • 问题内容: 我有一些单选按钮,我希望其中的一个按钮在页面加载时默认设置为选中状态。我怎样才能做到这一点? 问题答案: XHTML解决方案: 请注意,属性的实际值并不重要。这只是分配的约定。最重要的是,字符串喜欢或没有任何特殊含义。 如果您不希望符合XHTML,则可以将代码简化为:

  • 是否有方法将命令行参数传递给Gradle中的buildSrc项目。buildSrc位于主项目中,如果我用-p传递命令行args,那么主项目将接收它们,但不接收buildSrc。我需要这样做的原因是,我试图将maven Repository的凭据传递给buildSrc,buildSrc反过来使用它来解决其子项目的依赖关系。

  • 我使用atom-run(https://github.com/lsegal/atom-runner)运行内联我的nodejs程序。 使用此插件时,是否可以传递命令行参数?点击Alt R启动节点,但由于我的脚本需要参数,它失败了。 在运行之前,如何传递命令行参数?

  • 要启动Java程序,我可以传递如下参数: 在gradle命令行中有哪些好的方法可以做到这一点: 这是正在建造的。格雷德尔:

  • 问题内容: 我有一个用Node.js编写的Web服务器,我想使用一个特定的文件夹启动。我不确定如何在JavaScript中访问参数。我正在像这样运行节点: 这是我的服务器代码。Node.js帮助说这是可能的: 如何在JavaScript中访问这些参数?不知何故我无法在网上找到此信息。 问题答案: 参数存储在 以下是有关处理命令行参数的节点文档: 是一个包含命令行参数的数组。第一个元素是’node’

  • 问题内容: 我正在运行一个Ant zip任务来压缩Unix系统上目录的全部内容: 创建zip并检查内容后,我可以看到一些配置文件,Visual Studio特定文件以及其他文件(如Mac OS .DS_STORE文件)不在zip中。 是否遵循任何规则来决定不包含哪些文件? 我需要事先知道,因为我需要在压缩之前(当前使用Java)在该目录上创建现有文件的列表。现在,我排除了所有目录和隐藏文件(使用F