【ARM 嵌入式 编译系列 3.5 -- gcc 链接参数介绍】

文章目录

    • [gcc 链接参数介绍](#gcc 链接参数介绍)

gcc 链接参数介绍

上篇文章【ARM 嵌入式 编译系列 3.4 -- 查看所依赖库文件的路径 详细介绍】一直在提链接参数,那么链接参数有哪些,它们又有什么作用呢?

如前一篇文章中的的链接参数到底是什么意思呢?

c 复制代码
$(TARGET): $(OBJS)
        @echo Building target: $@
        $(LD) -L /usr/lib/gcc/arm-none-eabi/10.4.2/thumb/v8-m.main+fp/hard/ \
                -L /usr/lib/gcc/../thumb/v8-m.main+fp/hard/ \
                -T ../script/fsp.ld --gc-sections \
                -u _printf_float \ 
                -o $@ $(OBJS) \
                -lc -lm -lgcc
  • -L: 指定了 链接库的路径。
  • -T fsp.ld :指定了链接脚本。
  • --gc-sections :这是一个链接器选项,用于在链接时移除未使用的代码和数据节(sections)。这能够减少生成的程序的大小,特别是在嵌入式系统中非常有用。与编译器选项 -ffunction-sections-fdata-sections 结合使用时,可以实现针对未使用函数和数据的优化。
  • -u _printf_float: 强制链接器包含处理浮点数 printf 支持的代码。
  • -o $@ :指定了输出文件名,$@ 是 Makefile 中的变量,代表目标文件名, 也就是 $(TARGET)
  • $(objs) :是链接的对象文件列表,这也是一个 Makefile 变量,包含了所有要链接的对象文件,简单理解就是各个.c文件编译生成的 .o 文件。
  • -lc -lm -lgcc: 显式地链接 C 标准库、数学库以及 GCC 的支持库。需要它们以满足程序可能依赖的函数
  • --start-group--end-group--start-group--end-group 是链接器选项,用于解决循环依赖问题。当链接器处理库文件时,它通常按照给定的顺序一次处理一个库。如果在库 A 中存在对库 B 的引用,而库 B 又引用了库 A 的话,这就产生了循环依赖。使用 --start-group--end-group 会告诉链接器循环扫描这组库直到解决所有未解决的符号或者没有进一步的符号可以被解决为止。
  • -l:这是一个链接器选项,用于指定要链接的库。它后面通常跟着库的名称,不包括前缀 lib 和后缀(比如 .a.so)。
相关推荐
进击的小头3 小时前
第18篇:嵌入式电机控制专用外设:正交编码脉冲模块原理与闭环控制应用
arm开发·单片机·嵌入式硬件
ai产品老杨10 小时前
【架构深析】打破硬件壁垒:支持 X86/ARM 异构计算与源码交付的 GB28181 视频 AI 平台设计实践
arm开发·架构·音视频
AI服务老曹11 小时前
深度架构解析:如何构建兼容 X86/ARM 及异构计算(GPU/NPU)的级联级 AI 视频管理平台
arm开发·人工智能·架构
ai产品老杨13 小时前
架构深度解析:支持X86/ARM与GPU/NPU异构部署的AI视频管理平台实践(附源码交付与GB28181方案)
arm开发·人工智能·架构
婷婷_17215 小时前
【GMAC学习笔记】深入理解以太网DMA描述符机制
arm开发
誰能久伴不乏2 天前
SPI总线通信协议基础与ICM20607传感器驱动开发指南
arm开发·c++·驱动开发·嵌入式硬件·arm
CinzWS2 天前
A53指令级验证策略:从随机测试到定向场景——ARM CPU验证的“炼金术“
arm开发·嵌入式·芯片验证·原型验证·a53
AI服务老曹3 天前
【架构深评】打通 X86/ARM 异构屏障:基于 GB28181/RTSP 的企业级 AI 视频管理平台架构解析
arm开发·人工智能·架构
szxinmai主板定制专家3 天前
基于ARM+FPGA高性能MPSOC 多轴伺服设计方案
arm开发·人工智能·嵌入式硬件·fpga开发·架构
AI服务老曹3 天前
[深度解析] 兼容 X86/ARM 与多模态 NPU:基于 GB28181/RTSP 的工业级 AI 视频中台架构设计
arm开发·人工智能·音视频