Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C osx版本的gdb没有';在对象文件中不显示前导下划线_C_Macos_Gdb_Name Mangling - Fatal编程技术网

C osx版本的gdb没有';在对象文件中不显示前导下划线

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”命令所示。 如果调用一个

在我的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的幂”。