GNU 连接器 ld 的使用指南
ld 是 GNU 的连接器,用于将多个已经编译好的 .o 文件连接成可执行文件或者动态库。
一般使用方式如下:
1ld [参数选项] -o [输出文件名] obj_file1.o obj_file2.o obj_file3.o ...
例如,.a 库文件可以跟 .o 文件一起列出来:
1ld -o main crt0.o obj1.o obj2.o libq1.a
以上例的 libq1.a 可以用 -l 选项指定:
1ld -o main crt0.o obj1.o obj2.o -lq1
gcc/g++ 也可以直接调用 ld 加选项进行连接,例如:
12345ld -e start1 obj1.o obj2.o # 指定 start1 符号为程序入口点# 换成 gcc 来使用的话,采用 -Wl 选项来传递连接选项参数 :# gcc -Wl,-e,start1 obj1.o obj2.o
常用的 ld 的选择项有:
选项
解释
-e address --entry address
设置程序的执行入口点
-EB
连接对象文件为大端字节序
-EL
连接对象文件为小端字节序
-A arch
指定 CPU 架构
-b target --format target
指定输入文件的格式
-h filename -soname filename
设置共享库的内部名字
-I program --dynamic-linker program
设置动态连接解释程序名称
--no-dynamic-linker
可执行文件不需要动态连接解释程序设置
-l libname --library libname
指出连接需要的库的名称
-L directory--library-path directory
指出库文件的搜索路径
-o filename--output filename
设置输出文件名
-s--strip-all
去除所有符号
-S--strip-debug
去除调试用的符号
--strip-discarded
去除标记为 discarded 段中的符号
-T filename--script filename
读取连接器脚本
-Bdynamic-dy-call_shared
使用共享库来连接
-Bstatic-dn-non_shared-static
使用静态库来连接
-init symbol
设置在装载时调用指定符号
-Map FILE/DIR
写入map到文件或者目录
-nostdlib
仅仅连接命令行中指定的库,不连接其他标准库
--oformat TARGET
支持输出文件的格式
-rpath PATH
设置程序运行时,动态库的搜索路径
-rpath-link PATH
设置连接时,动态库的搜索路径
-shared-Bshareable
生成共享库
-pie--pic-executable
生成位置无关代码的可执行文件
许可协议
本文采用 署名-非商业性使用-相同方式共享 4.0 国际 许可协议,转载请注明出处。