动,静态库
lib.XXX.a-静态库--静态链接(gcc -o test.c -g)
lib.XXXso-动态库--动态链接(默认)
静态库设计
此方法给用户用的两种方法:
1.提供源码,用户直接使用
2.不提供源码,把源码打包成库=库+.h。而对于头文件,其对应的库必须公开,否则头文件无法调用。
静态库本质就是将多个源文件(a.c b.c c.c d.c test.c)编译为(a.o b.o c.o d.o test.o),然后打包链接起来。
形成静态库
lib =libmymath.a(静态库名称libmymath.a)
$(lib):mymath.o(依赖关系)
ar 是生成静态库指令
输出静态库
使用该静态库
我们发现无法编译,原因在于该头文件不再系统默认路径,也不在当前目录下,系统没找到头文件。
解决方法指定路径:让操作系统在在没找到头文件情况下去指定路径寻找(-I是include简写)
但是却出现了连接式报错,原因在于没找到add的实现。及找不到静态库。原因同样如上
通过-L(lib)告诉操作系统静态库的路径,此处因为没指出应 链接哪些库,编译再次失败,头文件不用告诉名称的原因在于main.c内已经包含头文件,不需要再告诉操作系统。
解决方法:-l(link) -lmymath(llibmymath.a去除前缀和后缀才是库名称)