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

Sam*_*ari 1 c assembly gcc compilation

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

例如,看看这个回购.make文件将生成一个文件(二进制文件).

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

任何的想法?

fuz*_*fuz 7

我看到三种方法:

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

    s/\.L\([[:alnum:]]*\)/.L$ident\1/
    
    Run Code Online (Sandbox Code Playgroud)

    where $ident是每个程序集文件的唯一字符串.这变成.Lfoo.Lidentfoo.

  • 创建一个看起来像这样的C源文件并编译它,与以前一样需要注意:

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