我正在从一个大的C文件(>50000 LOC)构建Linux内核模块(LKM)。这是一些生成的RAID计算代码。当我试图从kbuild构建它时,gcc消耗了所有的内存并崩溃,而手动调用gcc工作得很好。
在检查了手册中的对象文件后,我发现了gcc和kbuild中的对象文件,其中kbuild对象文件的大小是手册中的gcc对象的20-30倍(900k比30M)。原因是kbuild对象文件包含了包含大量数据的巨大部分debug_info。
下面是来自objdump -x的片段
RELOCATION RECORDS FOR [.debug_info]:
OFFSET TYPE VALUE
0000000000000006 R_X86_64_32 .debug_abbrev
000000000000000c R_X86_64_32 .debug_str+0x0000000000000c41
0000000000000011 R_X86_64_32 .debug_str+0x0000000000000e26
0000000000000015 R_X86_64_32 .debug_str+0x0000000000000544
0000000000000019 R_X86_64_64 .text
0000000000000021 R_X86_64_64 .text+0x0000000000060957
0000000000000029 R_X86_64_32 .debug_line
0000000000000030 R_X86_64_32 .debug_str+0x0000000000000b78
0000000000000037 R_X86_64_32 .debug_str+0x000000000000011e
0000000000000040 R_X86_64_32 .debug_str+0x000000000000066b
0000000000000047 R_X86_64_32 .debug_str+0x0000000000000d38
000000000000004e R_X86_64_32 .debug_str+0x0000000000000bef
... another 60000 records ...
00000000000a0c8d R_X86_64_32 .debug_str+0x0000000000000add
00000000000a0ca0 R_X86_64_32 .debug_str+0x0000000000000526
00000000000a0cae R_X86_64_64 Calculation_1s_Func_Buf我已经尝试过EXTRA_CFLAG += -S,但没有成功。
那么,在使用kbuild进行构建时,有什么方法可以避免在我的对象文件中创建调试信息呢?
发布于 2013-11-20 18:32:57
你有没有试过关闭CONFIG_DEBUG_INFO?
在‘内核破解’->‘编译时检查和编译器选项’->‘在menuconfig中使用调试信息编译内核。
https://stackoverflow.com/questions/20090411
复制相似问题