而在链接阶段, -Wl,–gc-sections 指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),这样就能减少最终的可执行程序的大小了。 我们常常使用下面的配置启用这个功能: 1 2 CFLAGS += -ffunction-sections -fdata-sections LDFLAGS += -Wl,--gc-sections 例子 main.c 文件...
GCC链接操作是以section作为最小的处理单元,只要一个section中的某个符号被引用,该section就会被加入到可执行程序中去。因此,GCC在编译时可以使用 -ffunction-sections 和 -fdata-sections 将每个函数或符号创建为一个sections,其中每个sections名与function或data名保持一致。而在链接阶段, -Wl,–gc-sections 指示链接...
GCC链接操作是以section作为最小的处理单元,只要一个section中的某个符号被引用,该section就会被加入到可执行程序中去。因此,GCC在编译时可以使用 -ffunction-sections 和 -fdata-sections 将每个函数或符号创建为一个sections,其中每个sections名与function或data名保持一致。而在链接阶段, -gc-sections 指示链接器去掉...
执行ld链接器堆栈段不可执行机制(其中-wl, 表示后面的参数 -gc-sections 传递给assembler) -frtti RTTI(Run-Time Type Identification),通过运行时类型信息程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。-frtti选项使编译器为每个有虚函数的类添加一些信息以支持rtti特性,例如dynamic_cast...
–gc-sections表示依赖库中不使用的sections将不被链接,可以减小链接目标的大小,一般跟-ffunction-sections一起使用。用法:-Wl,–gc-sections。 –whole-archive –whole-archive用来告诉链接器,将后面库中出现的所有符号都链接进来,这样有一个好处是链接的时候不需要考虑中间文件和库文件的顺序,以保证链接能够成功。
CFLAGS 加上 -ffunction-sections -fdata-sections LDFLAGS 加上 --gc-sections 原理如下: -function-sections的意思是,将不同函数编译到不同的section上面。如果没有这个选项,所有的函数都会编译到一个section上面,于是函数就不能被“剥离”。 -fdata-sections同理。
希望能对从事包体积优化的同学有所帮助或启发。 1. 背景 2. so 文件格式分析 3. so 可优化内容分析...
-ffunction-sections 编译源文件时,为每个function分配独立的section。 -fdata-sections 编译源文件时,为每个data分配独立的section。 --gc-sections 链接时,以section为最小处理单元,只有当section中有symbol被使用,才将该section链接到output中 我们在编译选项里面加上 -ffunction-sections -fdata-sections, 然后在链接...
指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),链接操作以section作为最小的处理单元(结合-ffunction-sections),只要一个section中有某个符号被引用,该section就会被放入output中。 什么是'被引用',个人认为是指'被调用',或者符号被export引起的链接器认为这是一个接口 ...
指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),链接操作以section作为最小的处理单元(结合-ffunction-sections),只要一个section中有某个符号被引用,该section就会被放入output中。 什么是"被引用",个人认为是指"被调用",或者符号被export引起的链接器认为这是一个接口 ...