嵌入式---->Arm gcc 编译参数,

本篇文章基于mingw32-make.exe来执行编译Cortex-Arm4内核的工程来编写和测试的,环境Windows10

文章目录

  • 前提准备
  • 具体参数
    • 参数表
    • 参数用例
      • 可执行程序的大小优化
  • 参考

前提准备

  • 对Makefile有一定的使用经验,阅读本文章至少要对makefile语法有了解程度
  • Windows 下使用 Mingw32-make 来执行 Makefile示例
  • GCC是什么

具体参数

参数表

参数项 功能 notes
-ffunction-sections 优化
-fdata-sections 优化
-Wl 优化
–gc-sections 优化
-Wall

参数用例

可执行程序的大小优化

  • 有时我们的程序会定义一些暂时使用不上的功能和函数,虽然我们不使用这些功能和函数,但它们往往会浪费我们的ROM和RAM的空间。这在使用静态库时,体现的更为严重。有时,我们只使用了静态库仅有的几个功能,但是系统默认会自动把整个静态库全部链接到可执行程序中,造成可执行程序的大小大大增加。
  • 为了解决前面分析的问题,我们引入了标题中的几个参数。GCC链接操作是以section作为最小的处理单元,只要一个section中的某个符号被引用,该section就会被加入到可执行程序中去。因此,GCC在编译时可以使用 -ffunction-sections和 -fdata-sections 将每个函数或符号创建为一个sections,其中每个sections名与function或data名保持一致。而在链接阶段, -Wl,–gc-sections 指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),这样就能减少最终的可执行程序的大小了。
    CFLAGS += -ffunction-sections -fdata-sections
    LDFLAGS += -Wl,--gc-sections
    
    all:main.exe
    
    main.exe:main.c
    	gcc $(CFLAGS)  -c main.c
    	gcc $(LDFLAGS)  -o $@ main.o 
    
    clean:
    	del main.exe main.o
    

参考

  • Windows 下使用 Mingw32-make 来执行 Makefile示例
  • gcc -ffunction-sections -fdata-sections -Wl,–gc-sections 参数详解
  • gcc -Wall详解
  • GCC中文手册

你可能感兴趣的:(#,嵌入式经验,arm,嵌入式硬件)