求助:关于gcc编译选项的问题
1.在编译之后的.o文件反汇编过来发现很多的symbol名称被替换为了.Lxx,其中xx是个数字,不知道有没有什么选项可以强制要求编译的时候不做这个替换,目前使用的优化选项是-O2,不用优化选项结果也是这样的2.想要的编译的同时生成一个反汇编文件,要求文件里C和对应的汇编都存在,有什么好办法吗
thanks
1.在编译之后的.o文件反汇编过来发现很多的symbol名称被替换为了.Lxx,其中xx是个数字,不知道有没有什么选项可以强制要求编译的时候不做这个替换,目前使用的优化选项是-O2,不用优化选项结果也是这样的
http://sourceware.org/binutils/docs-2.22/as/L.html#L
2.7 Include Local Symbols: -L
这个选项可能不是你想要的。.Lxx是局部符号,是编译器内部自动生成的,你的源程序中难倒有显式的符号被替换了么?能不能举个例子?
2.想要的编译的同时生成一个反汇编文件,要求文件里C和对应的汇编都存在,有什么好办法吗
http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options
-fverbose-asm
Put extra commentary information in the generated assembly code to make it more readable. This option is generally only of use to those who actually need to read the generated assembly code (perhaps while debugging the compiler itself).
-fno-verbose-asm, the default, causes the extra information to be omitted and is useful when comparing two assembler files.
这个选项可以生成带有详细信息的汇编文件。 感谢您的回复。
1.确实是有显示的函数名被替换了,我搜索了一下貌似是gcc4.0之后的特性,把static类型的函数symbol全部替换为了Lxx这种东西,貌似是为了防止链接出错
2.这个文件貌似叫source listing,就是C文件和对应的汇编交叉着,用来debug分析问题的
其实1,2我就是需要解决同一个问题了,我们的系统需要做debug分析工具,之前用的其他编译器可以在编译的同时生成source listing这个文件,但是gcc我现在还没有找到,然后debug将单个文件反汇编过去就发现了1中的问题,很多static的函数函数名被换了。。。
能不能贴出一个symbol被替换的小例子,我试试?呵呵 回复 4# EricFisher
看起来公司网络没法上传图片或者附件。。。
比如说一个函数叫setA,如果声明为extern,就可以在.o文件中找到,但是声明为static,在.o文件中就找不到了,会被替换为.Lxx这种,不过可以被外部链接到
奇怪,函数如果是static的,那么只能在该编译单元中可用,怎么可能被外部链接到? 回复 6# EricFisher
比如说一个函数叫setA,如果声明为extern,就可以在.o文件中找到,但是声明为static,在.o文件中就找不到了,会被替换为.Lxx这种,不过可以被外部链接到
最后那句不对。。。 本帖最后由 EricFisher 于 2012-03-20 16:19 编辑
我这里试了下,没有问题。$ cat test.c
static void
foo (void)
{
}
$ gcc -S test.c
$ cat test.s
.file "test.c"
.text
.type foo, @function
foo:
pushl %ebp
movl %esp, %ebp
popl %ebp
ret
.size foo, .-foo
.ident "GCC: (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2"
.section .note.GNU-stack,"",@progbits
$ gcc -c test.c
$ objdump test.o -d
test.o: file format elf32-i386
Disassembly of section .text:
00000000 <foo>:
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 5d pop %ebp
4: c3 ret 回复 8# EricFisher
thanks。。。可能环境不一致。。我们的gcc是某公司二次开发的,我们在windows下编译嵌入式系统。。。
页:
[1]