ld,GNU 链接器介绍以及命令行参数详解

ld,GNU 链接器介绍以及命令行参数详解

当我们使用GCC编译源代码生成可执行程序,经过预处理、汇编、编译、链接四个阶段。
链接器(Linker)将多个目标文件和库文件链接起来,链接器还解决目标文件之间的符号引用,即函数和变量的外部引用,并确保所有依赖都被正确地包含进来,生成最终的可执行文件或共享库。

ld(Linker)是GCC(GNU Compiler Collection)工具链的一个重要组成部分。

命令行参数详解

ld的命令行参数非常丰富,下面介绍一些常用的参数:

输入和输出

-o output_file 指定输出文件的名称。
input_files 目标文件和库文件列表,不需要通过 -o 和 -l 参数指定,ld 会自动识别。

控制链接行为

-r 或 --relocatable 创建一个可重定位的目标文件,而不是可执行文件。
-b bfd_name 或 --binary-format=bfd_name 指定目标文件的二进制格式。
-z flag 或 --wrap=flag 替换某个函数的调用,通常用于调试。

符号和重定位

-d 或 --as-needed 只加载链接时实际需要的动态库。
-u symbol 或 --undefined=symbol 强制保留未定义的符号。
-l library 或 --library=library 添加一个标准库到链接命令中。
-L path 或 --library-path=path 添加一个目录到库搜索路径。

特殊功能

-shared 创建一个共享对象文件。
-static 创建一个静态链接的可执行文件或库。
-e entry_point 或 --entry=entry_point 指定程序的入口点。

调试和日志

-Map map_file 或 --output-map-file=map_file 创建一个映射文件,记录链接器如何布局输出文件的各个部分。
-rpath path 或 --enable-new-dtags 设置运行时库的搜索路径。
-v 或 --verbose 显示详细的链接信息。

高级控制

-T linker_script 或 --script=linker_script 使用一个链接脚本来控制输出的布局和行为。
-Ttext address 或 --text-base=address 设置代码段的基地址。

示例

假设你有两个目标文件 main.o 和 libfoo.o,想要创建一个名为 myapp 可执行文件,可以这样使用 ld:

ld -o myapp main.o libfoo.o

如果要链接一个库 libbar.a 并且控制输出的布局,你可以使用一个链接脚本 linker.ld:

ld -T linker.ld -o myapp main.o libfoo.o -lbar

注意,上述命令在某些环境中可能需要使用特定的前缀,例如在ARM64环境下,可能会使用 aarch64-linux-gnu-ld,而不是简单的 ld。

同时,ld 的完整命令行参数可以通过执行 ld --help 或查阅其手册页获得。

相关推荐

  1. ld,GNU 介绍以及命令参数详解

    2024-07-18 00:14:01       18 阅读
  2. ARM 优化功能介绍

    2024-07-18 00:14:01       56 阅读
  3. Python命令参数处理:详解argparse模块

    2024-07-18 00:14:01       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 00:14:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 00:14:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 00:14:01       58 阅读
  4. Python语言-面向对象

    2024-07-18 00:14:01       69 阅读

热门阅读

  1. Windows 点云生成二维栅格图 [附C++完整代码实现]

    2024-07-18 00:14:01       20 阅读
  2. go recover

    2024-07-18 00:14:01       23 阅读
  3. docker从0到1 部署gitlab 纯干货

    2024-07-18 00:14:01       22 阅读
  4. C# —— var

    2024-07-18 00:14:01       23 阅读
  5. 【VUE】10、VUE项目中多环境管理使用

    2024-07-18 00:14:01       24 阅读
  6. React学习记录 ---第六章

    2024-07-18 00:14:01       21 阅读
  7. python 读取 hdfs 数据

    2024-07-18 00:14:01       20 阅读
  8. 营销策划方案模板

    2024-07-18 00:14:01       22 阅读