繁体   English   中英

如何使用 g++ 获取 C++ header (.hpp) 文件的汇编代码?

[英]How can I use g++ to get assembly code for a C++ header (.hpp) file?

我有兴趣尝试查看我的 header 文件的汇编代码。 使用虚拟 main 方法处理 simple.cpp 文件并编译它很容易: g++ -S -o prog.exe main.cpp

但是,我现在要进入 header 个文件。 我有一个虚拟 header 文件func.hpp ,它只包含一个虚拟方法,现在我希望能够编译它并在 aS 文件中查看它的程序集。 (这样做的主要原因是,如果我有一个更复杂的 function,也许我可以在汇编中进行一些手动优化,并通过g++ -o prog.exe func.S main.cpp构建最终的可执行文件。

但是,我无法找到解释这一点的来源。 如果我尝试g++ -S -o func.S func.hpp我收到一条错误消息output filename specified twice 谁能帮我这个?

作为参考,这里是 func.hpp:

int number()
{
    return 0;
}

我也在尝试使用另一个名为 struct.hpp 的 hpp 文件:

struct Coord
{
    int x;
    int y;
};

两者都出现相同的错误,但我希望能够在不将它们转换为 .cpp 文件的情况下查看两个标头的程序集(因为这破坏了 header 文件的含义。)

您可以强制 g++ 将 .hpp 文件视为 C++ 源文件。

g++ -x c++ -S -o func.S func.hpp

您收到“输出文件名指定两次”消息的原因是,当将 header 文件传递给 gcc 时,它会假设您要将其编译为预编译的 header 顾名思义,这将“编译”标题,因此会在中间生成一个 *.s 文件。 如果您使用原始命令传递-v标志,您将看到 cc1plus 的调用方式如下:

 /usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.1/cc1plus
     -quiet
     -v 
     -D_GNU_SOURCE 
     func.hpp
     -quiet 
     -dumpbase func.hpp 
     -mtune=generic 
     -march=x86-64 
     -auxbase-strip func.S
     -version 
     -o func.S                # <---
     -o /tmp/ccxEg3J7.s       # <---
     --output-pch= func.S

所以确实-o被指定了两次,一次来自你的-o ,一次来自编译器。

(当然,编译器可以避免添加-o /tmp/ccxEg3J7.s ,但为这种边缘情况增加的复杂性并不值得。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM