target_link_options( link.lds lds是什么
LDS文件是GNU链接器使用的链接脚本,常见扩展名为.lds/.ld/.x。它控制目标文件和库的链接方式,主要用于嵌入式开发:指定内存布局(如Flash/SRAM地址)、自定义段合并规则、定义符号等。在CMake中通过target_link_options()的-T参数指定LDS脚本(如-Tlink.lds)。普通PC应用通常使用系统默认链接脚本,而嵌入式开发必须使用LDS文件来精确控制内存映射,
你问的这个 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. 链接脚本能干什么
主要用途有:
-
指定存储区布局
-
比如嵌入式开发里,你要控制:
-
.text段放到 Flash 地址0x08000000 -
.data段放到 SRAM 地址0x20000000
-
-
这些都要靠
.lds来指定。
-
-
自定义段合并规则
-
把不同的 section 放在特定内存区域。
-
比如
.isr_vector放最前面。
-
-
符号定义
-
可以定义
_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 应用里不常见。
更多推荐
所有评论(0)