静态函数库
这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,
这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,
他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成
为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。
Linux下生成.a静态库文件的方法:
例子:A公司负责hello.c B公司负责main.c,A公司需要向B公司提供静态连接库与.h文件即可
1.生成.o目标文件
gcc -c hello.c,这里生成hello.o
gcc -c hello.c,这里生成hello.o
2.生成.a静态链接库文件(打包成一个压缩包,压缩包里面就是hello.o)
ar cr libmyhello.a hello.o
注:ar是用来创建,修改,和解压归档;
ar cr libmyhello.a hello.o
注:ar是用来创建,修改,和解压归档;
c是ar的参数,表示创建一个归档;
r是ar的参数,表示插入文件到归档里面。
所以最终创建了libmyhello.a的归档,并往里面插入hello.o
3.使用静态链接库
gcc -o hello main.c -static -L. -lmyhello
注:-o 输出文件名
-static 表示链接静态链接库。
gcc -o hello main.c -static -L. -lmyhello
注:-o 输出文件名
-static 表示链接静态链接库。
如果不使用该参数,而-L指定的目录下同时拥有静态链接库和动态链接库,gcc会默认使用动态链接库。
如果只有静态链接库,则会使用静态链接库。
-L 表示添加一个目录到目录列表,使得可以被-l用来搜索。
-l libary,当链接时,查找该library。
-L 表示添加一个目录到目录列表,使得可以被-l用来搜索。
-l libary,当链接时,查找该library。
本质上,静态链接库就是.o文件的集合
A公司只需要向B公司提供libmyhello.a与hello.h即可