【问题标题】:Produce both assembly and object file with gcc/clang: Possible? How?使用 gcc/clang 生成程序集和目标文件:可能吗?如何?
【发布时间】:2017-01-15 09:00:03
【问题描述】:

是否可以使用 gcc/g++/clang/clang++ 在一次命令中同时生成目标文件和源文件?怎么样?

我需要传递很多其他选项,所以我想避免在 2 个单独的命令中重复它们:

gcc -S test.cc # produce assembly
gcc -c test.cc # produce object file

【问题讨论】:

    标签: gcc compilation clang disassembly object-files


    【解决方案1】:

    您可以将-save-temps 选项赋予gcc:它将所有临时文件(包括.s 文件)留在当前目录中(也适用于clang):

    gcc -c --save-temps test.cc
    

    或使用-Wa,-aln=test.s 选项:

    gcc -c -Wa,-aln=test.s test.c
    

    来自gcc 文档:

    -Wa,option

    option 作为选项传递给汇编器。如果选项包含逗号,则在逗号处将其拆分为多个选项。

    来自as 文档:

    -a[cdghlmns] 以多种方式开启列表:

    • -al 包括程序集
    • -an省略表单处理

    [...]

    您可以组合这些选项;例如,将-aln 用于不进行表单处理的装配列表。

    Clang 有一个集成的汇编器,应该关闭 (How to switch off LLVM's integrated assembler?):

    clang++ -c -no-integrated-as -Wa,-aln=test.s test.c
    

    【讨论】:

    • 似乎clang -c --save-temps test.cc 使用的汇编程序与clang -Sclang -c 不同。并且该汇编程序会在添加到 clang 的功能时给出错误消息...clang -Sclang -c 都不会产生该错误。所以我不知道我的修改是错误的还是需要对环境进行更多的调整。我在 Windows 上,交叉编译到 ARM-Linux。
    猜你喜欢
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 2019-11-26
    • 2017-04-29
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2014-03-08
    相关资源
    最近更新 更多