这种功能,讲道理编译器肯定要支持的,于是搜了一下,果然是有个编译选项 需要在编译的时候,加入-ffunction-sections, -fdata-sections 选项,在链接的时候,加入--gc-sections...如果不加-ffunction-sections选项,则默认似乎是每个源文件为一个section进行链接,这样子只要这个文件中用到了一个函数,那么所有的函数都会被链接进来。...所以编译器认为所有的函数都没用,于是全部丢弃了 赶紧试试,果然, 在lds文件中加上 ENTRY(_start) 之后,就好了,编译出来查看map文件,确实把没用到的函数丢弃了 但还有一个问题,就是不能加上 -fdata-sections...,加上就报错,只能用-ffunction-sections,这个暂时没解决 想起以前用STM32的时候,keil(MDK)就提供了一个选项,Options->C/C++ 中勾选上 “One ELF
/agg/font_freetype -ffunction-sections -fdata-sections -I/home/gyd/workspace/app/dependencies/release.../agg/font_freetype -ffunction-sections -fdata-sections -I/home/gyd/workspace/app/dependencies/release
Release -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS="-Ofast -march=native -mtune=native -flto -funroll-loops -ffunction-sections...-fdata-sections -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="-Ofast -march=native -mtune=native -flto -funroll-loops...-ffunction-sections -fdata-sections -Wl,--gc-sections" -DCMAKE_INSTALL_PREFIX=.
/Library/Android/sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -g -DANDROID -fdata-sections...-ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE...后来盯着 CMakeList,看到这些编译、link 优化项,心想也没有可能是这些的配置导致的: add_compile_options(-Oz -flto -ffunction-sections -fdata-sections
DBUILD_opencv_saliency=OFF -DBUILD_opencv_videostab=OFF -DBUILD_opencv_world=OFF -DCMAKE_CXX_FLAGS="-ffunction-sections...-fdata-sections -fvisibility=hidden -O3 -std=c++11 -mfloat-abi=softfp -mfpu=neon -march=armv7-a -mtune...=cortex-a8" -DCMAKE_C_FLAGS="-ffunction-sections -fdata-sections -fvisibility=hidden -O3 -mfloat-abi=
除此之外,两个编译参数“-ffunction-sections”和“-fdata-sections”,以及链接参数“-Wl,--gc-sections”可用来删除没有使用到的符号,“-Wl,”表示后面是传递给链接器
-fdata-sections -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG -...-fdata-sections -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -g -O0 -DDEBUG...-Wno-narrowing -Wno-comment -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections...-fdata-sections -msse -msse2 -msse3 -fvisibility=hidden -O3 -DNDEBUG -DNDEBUG C flags (Debug):...-fdata-sections -msse -msse2 -msse3 -fvisibility=hidden -g -O0 -DDEBUG -D_DEBUG Linker flags (
-- CMAKE_CXX_FLAGS_DEBUG: -DSAFE_MUTEX -DENABLED_DEBUG_SYNC -g -- CMAKE_CXX_FLAGS_RELWITHDEBINFO: -ffunction-sections...-fdata-sections -O2 -g - DNDEBUG -- CMAKE_CXX_FLAGS_RELEASE: -ffunction-sections -fdata-sections -O3...-DNDEBUG -- CMAKE_CXX_FLAGS_MINSIZEREL: -ffunction-sections -fdata-sections -Os -DNDEBUG -- CMAKE_C_LINK_FLAGS
/bin/bash # 基于君正发布的X1000开发板编译器(mips-gcc520-glibc222),编译gcc 5.2.0,增加-ffunction-sections -fdata-sections...mipsel-linux-gnu/share/gdb/python \ --with-build-time-tools=$mips_gcc/mips-linux-gnu/bin \ CFLAGS="-ffunction-sections...-fdata-sections" \ CXXFLAGS="-ffunction-sections -fdata-sections" \ SED=sed || exit -1 make
gyd/workspace/app/dependencies/libminigui-3.2.0/src/newgal/ -I/usr/include/ -D_DEBUG -Wall -Werror -ffunction-sections...-fdata-sections -D_WITH_TARGET_NONE -D__MINIGUI_LIB__ -D_REENTRANT -D_MG_ENABLE_SPLASH=1 -D_GNU_SOURCE...workspace/facelock/dependencies/libminigui-3.2.0/src/newgal/ -I/usr/include/ -D_DEBUG -Wall -Werror -ffunction-sections...-fdata-sections -D_WITH_TARGET_NONE -D__MINIGUI_LIB__ -D_REENTRANT -D_MG_ENABLE_SPLASH=1 -D_GNU_SOURCE
-ffunction-sections 、-fdata-sections LDFLAGS_FINAL += --gc-sections PLATFORM_RELFLAGS += -ffunction-sections...-fdata-sections \ -fno-common -ffixed-r9 可以参考本文: https://blog.csdn.net/pengfei240/article/details
编译器可以配置自动去除未使用的函数和变量,以下是配置方式: CMake: # 去除未使用函数与变量set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections...-fdata-sections")set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}")# 设置去除未使用代码的链接flagSET_TARGET_PROPERTIES(yoga...PROPERTIES LINK_FLAGS "-Wl,--gc-sections") Android.mk: OCAL_CPPFLAGS += -ffunction-sections -fdata-sectionsLOCAL_CFLAGS...+= -ffunction-sections -fdata-sections LOCAL_LDFLAGS += -Wl,--gc-sections ◆ 设置编译器的 Visibility Feature
补充说明:想要达到生成最终可执行文件,只链接.a库中用到的函数,需要在编译生成.a库时,就带有-ffunction-sections参数。...Note that objects compiled without the -ffunction-sections and -fdata-sections options can still be linked...The GNAT static library is now compiled with -ffunction-sections and -fdata-sections on some platforms...、-fdata-sections,在编译生成的.o目标文件中,会将每个函数或数据段,放在各种单独独立的section中; 在链接生成最终可执行文件时,如果带有-Wl,--gc-sections参数,并且之前编译目标文件时带有...-ffunction-sections、-fdata-sections参数,则链接器ld不会链接未使用的函数,从而减小可执行文件大小; 如果使用了-r的链接参数,来产生重定位的输出,需要显示的调用-e参数来指定程序入口
所以我们需要减小目标文件 section 的粒度,这需要借助另外两个编译参数 -fdata-sections 和 -ffunction-sections ,这两个参数通知编译器,将每个变量和函数分别放到各自独立的...实际上 Android 编译目标文件时会自动带上 -fdata-sections 和 -ffunction-sections 参数,这里一并列出来,是为了突出它们的作用。...CMake 项目的配置方式: set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdata-sections -ffunction-sections") set(CMAKE_CXX_FLAGS...} -Wl,--gc-sections") ndk-build 项目的配置方式: LOCAL_CFLAGS += -fdata-sections -ffunction-sections LOCAL_LDFLAGS... -ffunction-sections") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Oz -flto -fdata-sections -ffunction-sections
Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections...-fdata-sections -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG -...-fdata-sections -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -g -O0 -DDEBUG...-fdata-sections -msse -msse2 -msse3 -fvisibility=hidden -O3 -DNDEBUG -DNDEBUG -- C flags (Debug...-fdata-sections -msse -msse2 -msse3 -fvisibility=hidden -g -O0 -DDEBUG -D_DEBUG -- Linker flags
因此,GCC在编译时可以使用 -ffunction-sections和 -fdata-sections 将每个函数或符号创建为一个sections,其中每个sections名与function或data
Wall -Wno-pointer-sign -Wno-missing-braces -Wno-format -Wno-address -Wno-unused-but-set-variable -s -fdata-sections...-ffunction-sections -g -gdwarf-2 --specs=nano.specs --specs=nosys.specs -MMD -MP -MF"Output/obj/los_dispatch_gcc.d
1.配置CC编译规则 注意勾选一下选项,填写规则 Misc Controls : -mcpu=cortex-m3 -mthumb -fdata-sections -ffunction-sections注...-fdata-sections和-ffunction-sections和下文连接规则一起说 2.配置Assembler编译规则 类似前一项 Misc Controls : -mcpu=cortex-m3...-fdata-sections和-ffunction-sections和–gc-sections的说明如下 4.stm32f10x_flash_extsram.ld内容 /* Default linker
领取专属 10元无门槛券
手把手带您无忧上云