说明
ld 命令是二进制工具集 GNU Binutils 的一员,是 GNU 链接器,用于将目标文件与库链接为可执行程序或库文件。
语法
ld [选项] [目标文件...]
选项
-b: 指定目标代码输入文件的格式 -Bstatic: 只使用静态库 -Bdynamic: 只使用动态库 -Bsymbolic: 把引用捆绑到共享库中的全局符号 -c: 从指定的命令文件读取命令 --cref: 创建跨引用表 -d: 设置空格给通用符号,即使指定了可重定位输出 -defsym: 在输出文件中创建指定的全局符号 -demangle: 在错误消息中还原符号名称 -e: 使用指定的符号作为程序的初始执行点 -E: 对于 ELF 格式文件,把所有符号添加到动态符号表 -f: 对于 ELF 格式共享对象,设置 DT_AUXILIARY 名称 -F: 对于 ELF 格式共享对象,设置 DT_FILTER 名称 -format: 指定目标代码输入文件的格式 (和-b
相同) -g: 被忽略。用于提供和其他工具的兼容性 -h: 对于 ELF 格式共享对象,设置 DT_SONAME 名称 -i: 执行增量连接 -l: 把指定的存档文件添加到要连接的文件清单 -L: 把指定的路径添加添加到搜索库的目录清单 -M: 显示连接映射,用于诊断目的 -Map: 创建指定的文件来包含连接映射 -m: 模拟指定的连接器 -N: 指定读取/写入文本和数据段 -n: 设置文本段为只读 -noinhibit-exec: 生成输出文件,即使出现非致命连接错误 -no-keep-memory: 为内存使用优化连接 -no-warn-mismatch: 允许连接不匹配的目标文件 -O: 生成优化了的输出文件 -o: 指定输出文件的名称 -oformat: 指定输出文件的二进制格式 -R: 从指定的文件读取符号名称和地址 -r: 生成可重定位的输出(称为部分连接) -rpath: 把指定的目录添加到运行时库搜索路径 -rpath-link: 指定搜索运行时共享库的目录 -S: 忽略来自输出文件的调试器符号信息 -s: 忽略来自输出文件的所有符号信息 -shared: 创建共享库 -sort-common: 在输出文件中不按照长度对符号进行排序 -split-by-reloc: 按照指定的长度在输出文件中创建额外的段 -split-by-file: 为每个目标文件在输出文件中创建额外的段 --section-start: 在输出文件中指定的地址定位指定的段 -T: 指定命令文件 (和-c
相同) -Ttext: 使用指定的地址作为文本段的起始点 -Tdata: 使用指定的地址作为数据段的起始点 -Tbss: 使用指定的地址作为 bss 段的起始点 -t: 在处理输入文件时显示它们的名称 -u: 强制指定符号在输出文件中作为未定义符号 -warn-common: 当一个通用符号和另一个通用符号结合时发出警告 -warn-constructors: 如果没有使用任何全局构造器,则发出警告 -warn-once: 对于每个未定义的符号只发出一次警告 -warn-section-align: 如果为了对齐而改动了输出段地址,则发出警告 --whole-archive: 对于指定的存档文件,在存档中包含所有文件 -X: 删除所有本地临时符号 -x: 删除所有本地符号
参数
目标文件:指定需要连接的目标文件
实例
链接目标文件生成可执行文件。给定 C++ 目标文件 test.o
与 main.o
,生成可执行文件 mylib.out
。
ld /usr/lib64/crt1.o /usr/lib64/crti.o /usr/lib64/crtn.o /usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtbegin.o /usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtend.o -L/usr/lib/gcc/x86_64-redhat-linux/4.8.5 -L/usr/lib64 -L/usr/lib -lstdc++ -lm -lgcc_s -lc -lgcc main.o mylib.o -o test.out