正如手册页所说:
\n\n\n-ffunction-sections
\n
\n-fdata-sections
\n\xc2\xa0\xc2\xa0
如果目标支持任意部分,则将每个函数或数据项放入 \n\xc2\xa0\xc2\xa0 输出文件中自己的部分中。\
n\xc2\xa0\xc2\xa0 函数的名称或数据项的名称决定
输出文件中节的名称。
编译此代码后:
\n...\n\nint bss_var_1 = 0;\nint bss_var_2;\nint bss_var_3;\n\nint data_var_1 = 90;\nint data_var_2 = 47;\nint data_var_3[128] = {212};\n\nint foo() {\n printf("hello, foo()\\n");\n}\n\nint func() {\n printf("hello, func()\\n");\n}\n\nint main(void) {\n ...\n}\nRun Code Online (Sandbox Code Playgroud)\n我有main.o进入了我的文件夹,然后列出了它的所有部分,它确实将每个函数和数据放入了自己的部分中,但是为什么开发人员需要这两个选项?(例如,完成工作的任何特殊用途)
$ readelf build/main.o -S\nThere are 34 section headers, starting at offset 0xeb0:\n\nSection Headers:\n [Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n [ 0] NULL 00000000 000000 000000 00 0 0 …Run Code Online (Sandbox Code Playgroud)