链接

静态库

  • archive 通过 ar(用于archive的使用工具)来创建和更新
  • 静态哭约定在他们的文件名中使用”.a”的扩展名
1
2
3
4
5
6
7
#首先将代码文件编译为目标文件.o
gcc -c staticMath.c
#使用ar工具打包成.a的静态库文件
ar -crv libstaticmath.a staticMath.o

#使用静态库, -L指定静态库的搜索路径 -l指定静态库名 不需要lib前缀和.a后缀
gcc TestStaticMath.c -L../StaticLibrary -lstaticmath

动态库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#使用-fPIC生成目标文件 
gcc -fPIC -c DynamicMath.c
#使用连接器选项-shared生成动态库 .so shared object
gcc -shared -o libdynmath.so DynamicMath.o


#两步可以合二为一
gcc -fPIC -shared -o libdynmath.so DynamicMath.c

#使用动态库编译成可执行文件
gcc TestDynamicLibrary.c -L../DynamicLibrary -ldynmath
#将libdynmath.so安装在/lib或/usr/lib目录下
#或在/etc/ld.so.conf文件加入库目录所在的路径名
#ldconfig 运行ldconfig重建/etc/ld.so.cache文件

##查看一个可执行程序以来的共享库
ldd a.out

## nm命令可以打印出库中的涉及到的所有符号
nm libhello.h
#T表示 库中定义的函数
#W表示 在库中被定义,可能被其他库中的同名符号覆盖
#U表示 在库中被调用,单并没有在库中定义(需要其他函数库支持)