Skip to content
 语言工具链

链接工具

Updated: at 00:00:00Suggest Changes

ld

$ ld object_1.o object_2.o ... -o program
# 不同平台可能不一样;此处仅给出了主要的链接目标
$ ld /usr/lib/crt1.o /usr/lib/crti.o main.o -lc -dynamic-linker /lib/ld-linux.so.2

说明

  1. crt1.o内提供了_start入口点,它会调用main函数。
  2. -lc表示需要链接libc库。
  3. -dynamic-linker指定动态链接器/lib/ld-linux.so.2

静态链接

$ ar rs libstack.a stack.o push.o pop.o is_empty.o
ar: creating libstack.a

上述命令等价于

$ ar r libstack.a stack.o push.o pop.o is_empty.o

# 为静态库创建索引
$ ranlib libstack.a

# 静态链接
$ gcc main.c -L . -l stack -I stack -o main
  1. gcc的选项:-L指定库文件目录,-l告示库名(stack意为libstack),-I指定头文件目录。
  2. gcc -print-search-dirs查看编译器默认查找的目录。
  3. 编译器优先查找库名共享库libstack.so,然后再查找静态库libstack.a。如果只需链接静态库,则使用选项static

动态链接

# 使用 -f 跟随 编译选项 PIC ,生成 位置无关码
$ gcc -c fPIC stack.c push.c pop.c is_empty.c

# 打包生成 共享库
$ gcc -shared stack.o push.o pop.o is_empty.o -o libstack.so

# 动态链接
$ gcc main.c -L . -l stack -I stack -o main
$ ldd main

Previous Post
汇编工具
Next Post
解析 Linux 系统目录