2012-07-16 36 views
3

我在使用GCC和ld.I'm写作教育目的OS寻求帮助的,因为缺少我的知识的专业人士连接C代码,和我有编译问题并链接C代码。说实话,在没任何问题,但我在输出文件由GCC和LD喜欢编译并没有在输出文件中的任何附加数据

GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 symtab..strtab..shstrtab..text..eh_frame..data..comment 
.ELF..| 

等 产生的unncessary数据我真的需要知道哪些参数同时使用有很困惑gcc和LD来降低这种无用的(我的OS)的数据

我以前使用的参数:-c -nostdlib -nostdinc -fno-内置-fno-堆栈保护 -fstrength-减少-finline函数 我也使用链接器脚本来组织段。

我试图objcopy把减少这种块作为的.comment和输出。注意,对我来说是最好的解决办法

objcopy -R .note -R .comment -S -O binary kernel.o kernel.bin 
+1

http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html – pmg 2012-07-16 15:56:28

回答

1

问题可以通过链接器脚本解决。使用/DISCARD/块。 LD手册说,这个块排除从最终的输出在它上市的一切。

所以,我的.text.data.bss

/DISCARD/ : 
{ 
    *(.comment) 
    *(.eh_frame) 
    *(.note.GNU-stack) 
} 

除了这条线在我的链接脚本,使输出平面二进制文件的最开始后插入此块。因此,我不需要再使用objcopy了。

4

你编译拆分和衔接阶段。使用“-s”选项GCC减少.o文件。 (pmg注释中的链接特别引人关注,尽管与链接器脚本无关)

简单内核的链接器脚本描述here (tutorial for building the kernel using LD)

使用

ld -T <yourscript> <objectfilelist> -o kernel.bin 

命令来获得所需的二进制文件。

相关问题