GNU 连接器 ld 的使用指南

GNU 连接器 ld 的使用指南

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 国际 许可协议,转载请注明出处。

相关创作