本教程以Ubuntu16.04系统为例,实验涉及的程序文件有:xyhcal.c,add.c,sub.c,mul.c,xyhcal.h,这五个文件的源代码如图1所示:

图1 源代码示意图
Linux动态库具体实现步骤如下:
1. 将add.c,sub.c,mul.c文件编译为.o文件(不链接),使用gcc -fPIC -c命令操作,具体实现如下:
实例:gcc -fPIC -c add.c -o add.o
gcc -fPIC -c sub.c -o sub.o
gcc -fPIC -c mul.c -o mul.o
实现过程如图2所示:

图2 命令实现
2. 将add.c,sub.c,mul.c文件生成的.o文件编译为动态库,具体命令实现如下:gcc -shared -Wl,-soname,libmycal.so.1 -o libmycal.so.1.1 add.o sub.o mul.o。
命令实现如图3所示:

图3 命令实现过程
3. 添加动态库并编译xyhcal.c程序
命令实现:gcc xyhcal.c libxyhcal.so.1.1 -o xyhcal,如图4所示:

图4 命令实现
4. 用ldd查看xyhcal程序是否缺少动态库链接路径,命令实现如图5所示:

图5 命令实现
5. 添加动态库路径,用sudo vim /etc/ld.so.conf命令文件,添加/home/xyh/xyhcal目录。实现如图6,图7所示:

图6 命令输入

图7 链接路径添加
6. 更新生效ld.so.conf文件,Shell终端输入命令sudo ldconfig -v,实现如图8所示:

图8 更新ld.so.conf文件
7. 运行程序./xyhcal,命令实现如图9所示:

图9 运行程序结果
Linux静态库具体实现步骤如下:
1. 将add.c,sub.c,mul.c文件编译为.o文件(不链接),使用gcc -fPIC -c命令操作,具体实现如下:
实例:gcc -fPIC -c add.c -o add.o
gcc -fPIC -c sub.c -o sub.o
gcc -fPIC -c mul.c -o mul.o
实现过程如图10所示:

图10 命令实现
2. 将生成的.o文件编译为静态库
命令实现:ar src libxyhcal.a add.o sub.o mul.o,结果如图11所示:

图11 命令实现
3. 编译xyhcal.c文件,如图12所示:

图12 命令实现
4. 运行程序xyhcal程序,结果如图13所示:

图13 命令实现