将多个C代码编译为一个单独的程序集文件

时间:2016-07-05 14:26:50

标签: c gcc assembly compilation

我想将多个C文件编译为单个汇编文件(它们是互连的,当您编译它时,您将拥有一个二进制文件)。 GCC有可能吗?

例如,请查看this repo。 make文件将生成一个文件(二进制文件)。

但是我想将它们编译成汇编程序,检测代码然后将它们编译为二进制文件。显然,如果我将所有汇编文件放在一个* .s文件中,对我来说会更容易。

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

我看到三种方法:

  • 使用cat连接程序集文件。除非两个或多个翻译单元使用具有相同名称的静态变量,否则这应该有效。如果标签使用两次,这可能会有问题。您可以使用这样的sed脚本预处理单个文件,以使标签具有唯一性:

    s/\.L\([[:alnum:]]*\)/.L$ident\1/
    

    其中$ident是每个程序集文件的唯一字符串。这会将.Lfoo变为.Lidentfoo

  • 制作一个看起来像这样的C源文件并进行编译,与以前一样需要注意:

    #include "module1.c"
    #include "module2.c"
    ...
    #include "modulen.c"
    
  • 使用ld -r对一组目标文件执行部分链接。这将为您提供一个包含其他文件内容的大对象文件。然后,您可以使用objconv之类的工具来反汇编目标文件,检测并重新组装。请注意,这可能不是您所需要的。

答案 1 :(得分:2)

您可以尝试将所有来源与Amalgamate粘合在一起,然后生成装配输出。