我想将多个 C 文件编译成一个汇编文件(它们是相互关联的,当你编译它时你将得到一个二进制文件)。在 GCC 中有可能吗?
例如看看this repo . make 文件将生成一个文件(二进制文件)。
但是我想将它们编译为程序集,检测代码,然后将它们编译为二进制文件。显然,如果我将所有程序集文件都放在一个 *.s 文件中,对我来说会更容易。
有什么想法吗?
最佳答案
我看到三种方法:
使用
cat
连接程序集文件。这应该有效,除非两个或多个翻译单元使用同名的静态变量。如果标签被使用两次,这可能会有问题。您可以使用这样的 sed 脚本预处理单个文件,使标签独一无二:s/\.L\([[:alnum:]]*\)/.L$ident\1/
其中
$ident
是每个程序集文件的唯一字符串。这会将.Lfoo
变成.Lidentfoo
。制作一个看起来像这样的 C 源文件并编译它,和以前一样警告:
#include "module1.c" #include "module2.c" ... #include "modulen.c"
使用
ld -r
对一组目标文件执行部分链接。这为您提供了一个包含其他文件内容的大目标文件。然后,您可以使用objconv
之类的工具来反汇编目标文件、检测它并重新组装。请注意,这可能不是您所需要的。
关于将多个 C 代码编译为一个汇编文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38205999/