c++ - 如何在 gcc (g++) 中编译 C++ 代码以查看重载函数的名称修改?

标签 c++ linux gcc

我有重载函数,例如:

void f(int)
void f(int, int)
void f(int, float)

如何编译它,以便我可以看到损坏的输出? 像这样的东西:

void f(int) should show: ?f@@YAXH@Z(int)

例如,要查看预处理器输出,我们使用 -E,汇编器输出 -s,名称错位输出是什么?

P.S: 平台是 Linux

编辑:

根据这里的答案,我们可以:

void func(int);
void func(int, int);
void func(void);
void func(char);

[root@localhost ~]# cat a.map | grep func
                0x0804881a                _Z4funcc
                0x08048790                _Z4funcv
                0x080487be                _Z4funcii
                0x080487ec                _Z4funci

最佳答案

对于 GCC 尝试使用:

-Xlinker -Map=output.map

http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

这将生成一个映射文件,其中将包含所有损坏的符号名称。

对于 MSVC:

http://msdn.microsoft.com/en-us/library/k7xkk3e2(v=vs.80).aspx

这将生成如下内容:

0002:00094190       ??0SerializationException@EM@@QAE@ABV01@@Z 10148190 f i y:foo.obj

关于c++ - 如何在 gcc (g++) 中编译 C++ 代码以查看重载函数的名称修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17302483/

相关文章:

c++ - 使用指针作为返回类型实现模板化接口(interface)的函数 -> 冲突返回类型错误

java - 在 Java 中写入串行

gcc - MacOS High Sierra上的链接错误: “Undefined symbols for architecture x86_64” std::__1

c - block 范围内的 extern 与文件范围内的 typedef 不冲突?

xcode - Xcode 或 gcc 是否有开发人员名称的宏?

c++ - operator << argument-dependent lookup 不在全局命名空间中查找

c++ - 重载运算符时可以使用标志吗?

c++ - 在 OS X 上跨 C 堆栈帧传播 C++ 异常

linux - 使用 Sed 从文本文件中删除一行

c - 使用 fchmod 比使用 chmod 更好吗?