C osx版本的gdb没有';在对象文件中不显示前导下划线
在我的MacOSX10.7中,gdb(v6.3.50)可以打开一个对象文件(比如foo.o);gdb命令“info functions”和“discompose”显示的名称与C源代码中的相同,但“nm”命令(nm foo.o)显示一个前导下划线 我在gdb中尝试了“设置demangle样式无”、“设置打印demangle关闭”、“设置打印asm demangle关闭”,但没有成功 如果我要求gcc生成asm源代码(gcc-cfoo.c),我可以看到函数名被修饰,如“nm”命令所示。C osx版本的gdb没有';在对象文件中不显示前导下划线,c,macos,gdb,name-mangling,C,Macos,Gdb,Name Mangling,在我的MacOSX10.7中,gdb(v6.3.50)可以打开一个对象文件(比如foo.o);gdb命令“info functions”和“discompose”显示的名称与C源代码中的相同,但“nm”命令(nm foo.o)显示一个前导下划线 我在gdb中尝试了“设置demangle样式无”、“设置打印demangle关闭”、“设置打印asm demangle关闭”,但没有成功 如果我要求gcc生成asm源代码(gcc-cfoo.c),我可以看到函数名被修饰,如“nm”命令所示。 如果调用一个
如果调用一个不存在的函数时出错也是一样的:当链接对象文件(gcc foo.o-o foo.bin)时,我可以看到函数名被修饰 如何让gdb显示前导下划线?
任何帮助都将不胜感激 另外:如果我将obj文件移动到Linux发行版,“nm”会打印:“无法识别文件格式”。我注意到它不是ELF:“file foo.o”告诉“Mach-0 64位对象x86_64”。
如何在Linux中使用该obj文件?仅针对最后一点,您不能在Linux中使用为Mac OS X编译的对象文件。它们使用与ELF不兼容的另一种二进制格式(Mach-O),MacOSX的二进制代码的ABI略有不同。忘了把ELF和Mach-O连在一起吧。您的
nm
无法识别它的原因是,它不是在启用Mach-O支持的情况下构建的。谢谢:我想我忘记了一些链接器选项。我还注意到我无法将asm源代码(foo.s)移动到Linux发行版:当链接(gcc foo.s-o foo)时,我会收到汇编程序错误消息,如“名称后面的字符不是#”或“对齐不是2的幂”。