函数库可分为两种类型,静态库和共享库。函数库是由某些目标文件(.o)组成的,静态库命名为 libxxx.a,动态库常命名为 libxxx.so。编译器在链接阶段,会把静态库嵌入至可执行文件中,会把动态库的“快捷方式”存储到可执行文件中。
3.1.静态库
静态库有 ar 工具创建。ar 命令语法如下:
$ ar [option] [tarfile] filelist
选 项功 能-d 从库中删除对象
-r 向库中插入对象(存在则替换)
-t 显示库中对象列表
-x 从库中提取对象
-c 创建库
写两个c源程序,分别为一个函数,制作一个静态库。
[linuxidc.com@linuxidc lib]$ gcc -c -Wall *.c [linuxidc.com@linuxidc lib]$ ar -cr libmy.a *.o [linuxidc.com@linuxidc lib]$ ar -t libmy.a add.o count.o
使用该静态库时,先定义静态库的应用接口
extern int add(int x, int y) extern int count(int * p);
写一个主程序,调用刚刚生成的库 libmy.a 。
# 使用libmy.a,库名为my [linuxidc.com@linuxidc lib]$ gcc -Wall main.c -L. -lmy
3.2.动态库
创建共享库(动态库),使用gcc命令创建。使用共享库,编译主程序。
[linuxidc.com@linuxidc lib]$ gcc -c add.c -fPIC // 编译共享库源程序须选项 -fPIC [linuxidc.com@linuxidc lib]$ gcc -c count.c -fPIC // 不加该选项,在链接时会报错 [linuxidc.com@linuxidc lib]$ gcc -shared add.o count.o -o libmy.so // 创建动态库 [linuxidc.com@linuxidc lib]$ gcc -Wall main.c -L/home/view/cpro -lmy -o main
4.GNU C 函数库(glibc)
Linux系统中 glibc 常用库文件目录
头文件 /usr/include // 系统头文件 /usr/local/include // 本地头文件 函数库 /lib // 系统必备共享库 /usr/lib // 标准共享库和静态库 /usr/X11R6/lib // X11R6 的函数库 /usr/local/lib // 本地函数库
添加库,除了把库文件放到以上路径,还可以自定义路径
vi /etc/ld.so.conf.d/xxx.conf ldconfig