你问的这个 lds,在 CMake 里一般出现在 target_link_options()target_link_libraries() 的参数中:


target_link_options(myapp PRIVATE -T link.lds)


1. .lds 是什么

  • .lds 文件其实是 GNU ld 的 linker script(链接脚本)。

  • 扩展名常见有:.lds.ld.x,只是命名习惯。

  • 用来控制 链接器(ld) 如何把目标文件和库组合成最终的可执行文件或固件。


2. 链接脚本能干什么

主要用途有:

  1. 指定存储区布局

    • 比如嵌入式开发里,你要控制:

      • .text 段放到 Flash 地址 0x08000000

      • .data 段放到 SRAM 地址 0x20000000

    • 这些都要靠 .lds 来指定。

  2. 自定义段合并规则

    • 把不同的 section 放在特定内存区域。

    • 比如 .isr_vector 放最前面。

  3. 符号定义

    • 可以定义 _end, _stack_top 等符号,供 C 启动代码使用。


3. target_link_options 的作用

  • target_link_options() 是 CMake 3.13+ 提供的 API,用来给目标加链接器参数。

  • -T link.lds 就是告诉 ld 使用 自定义链接脚本

  • 示例:

    
      

    add_executable(myapp main.c startup.c) target_link_options(myapp PRIVATE -T${CMAKE_CURRENT_SOURCE_DIR}/link.lds)


4. 为什么用 .lds

  • 普通应用程序(Linux/Windows PC):一般不需要,系统默认的链接脚本就够了。

  • 嵌入式开发(MCU, ARM Cortex-M 等):必须用 .lds,因为要精准控制 Flash、RAM、外设映射区。

  • 特殊需求:比如做 OS 内核、Bootloader、驱动,或者要在固定地址放数据。


总结
link.lds 就是 链接脚本 (linker script),告诉链接器如何布局内存和段。
在嵌入式开发里,这是标准做法;在普通 Linux 应用里不常见。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐