我想将多个C文件编译为单个汇编文件(它们是互连的,当您编译它时,您将拥有一个二进制文件)。 GCC有可能吗?
例如,请查看this repo。 make文件将生成一个文件(二进制文件)。
但是我想将它们编译成汇编程序,检测代码然后将它们编译为二进制文件。显然,如果我将所有汇编文件放在一个* .s文件中,对我来说会更容易。
有什么想法吗?
答案 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粘合在一起,然后生成装配输出。