步骤如下:
一. 创建使用静态库
1.将.c 文件生成对应的-o文件
gcc -c xxx.c -o xxx.o -I xxx
, 其中-c是生成二进制文件,-I 是.c中包含头文件的路径
2.将生成的.o 文件制作静态库ar rcs libxxx.a xxx.o
第一个xxx为静态库的名字,第二个xxx为所有的.o二进制文件
3.使用静态库gcc xxx.c -L 静态库路径 -l 静态库名字 -I 头文件路径 -o 执行文件
ps:
1.使用静态库的话如果改变.c文件内容则要重新按照步骤生成静态库,静态库对函数库的链接是放在编译时期完成的。
2.程序在运行时与函数库再无瓜葛,移植方便。浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。
3. 是静态库对程序的更新、部署和发布页会带来麻烦。如果静态库liba.lib更新了,所以使用它的应用程序都需要重新编译、发布给用户(对于玩家来说,可能是一个很小的改动,却导致整个程序重新下载,全量更新)。
二.创建使用动态库
1.生成.o文件
gcc -fPIC -c xxx.c -I xxx
,第一个XXX为需要打包成动态库的.c文件,第二个XXX为包含头文件路径
2;将.o文件生成动态库
gcc -shared -o libxxx.so xxx.o ,
,第一个XXX为动态库名字,第二个为步骤1生成的.o二进制文件
ps:
1.2 步骤可以合成一条语句:
gcc -shared -fPIC -o libxxx.so xxx.c -I xxx
3.生成可执行文件
gcc xxx.c -L
动态库路径 -l 动态库名字 -I 头文件路径 -o 可执行文件名字
4.修改/etc/ltrace.conf 文件,把动态库绝对路径添加进去
5.sudo ldconfig -v
更新所有动态库路径
ps:
动态库不比静态库,动态库更新无需重新编译原有的main.c文件,只需要更新动态库即可。
动态库把对一些库函数的链接载入推迟到程序运行的时期。
-可以实现进程之间的资源共享。(因此动态库也称为共享库)
-将一些程序升级变得简单。
-甚至可以真正做到链接载入完全由程序员在程序代码中控制(显示调用)。