【问题标题】:How can main.o not be created last during compilation of C project?C项目编译过程中如何不最后创建main.o?
【发布时间】:2016-07-20 15:27:42
【问题描述】:

我已经在我的计算机上观看了 GNU make 的安装过程 注意力。它是一个相对简单的编译:它依次创建 每个 .c 文件中的一个 .o 文件,然后通过链接创建一个可执行文件 所有 .o 文件,按照它们的创建顺序:

gcc  -g -O2 -rdynamic  -o make ar.o arscan.o commands.o default.o dir.o expand.o 
file.o function.o getopt.o getopt1.o guile.o implicit.o job.o load.o loadapi.o 
main.o misc.o output.o read.o remake.o rule.o signame.o strcache.o variable.o 
version.o vpath.o hash.o remote-stub.o glob/libglob.a

我在这里没有得到以下内容:main.o 怎么能 没有出现在这个列表的最后?因为使用可执行文件 一些参数等价于调用函数 main in main.c 在这些论点上,所以在 main.o 之后创建的任何东西 似乎没用。

【问题讨论】:

    标签: c gcc linker


    【解决方案1】:

    在 gcc 命令行中指定目标文件的顺序无关紧要。所有这些都链接到一个可执行文件中,并且该可执行文件知道main 函数所在的位置。

    当所有目标文件被读入时,链接器确保main 函数与从main 直接或间接调用的任何函数一起存在。

    仅仅因为一个目标文件被称为main.o 并不一定意味着main 函数存在于该文件中。

    【讨论】:

    • 在这种情况下严格来说main函数是不包含在任何目标文件中的吧?
    • @EwanDelanoy 我的意思是,在您的情况下,main 函数驻留在 main.o 中,这并不意味着该名称的文件通常将始终包含 main案子。目标文件的名称没有什么特别之处。
    【解决方案2】:

    其他文件包含由main 直接或间接调用的函数。没有它们,make 将无法运行。

    【讨论】:

      猜你喜欢
      • 2013-04-02
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 2016-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多