基于云班课作业的共享库和静态库测试的创建和调用过程
首先需要明确什么是共享库和静态库
静态库:
静态库(.a):程序在编译链接的时候把库代码链接到可执行文件中
共享库:
共享库(.so或者.sa):程序在运行的时候才去链接共享库的代码,多个程序共享使用库的代码
本质上来讲,老师在上课时提到,静态库的代码链接方法是没调用一次复制一次,这个在下面具体过程中可以得到验证。而动态库的调用过程并没有复制过程,也就是没有这种缺陷。
创建共享库并调用的过程
首先根据代码,需要创建四个.c文件,分别是add.c,sub.c,div.c,mul.c,相关代码如下
类似的“+,-,*,/”
head.h
之后有了这些代码,我们首先需要利用命令将其打包为 .so文件
之后运行命令
gcc -c -Wall -Werror -fPIC add.c,sub.c,mul.c,div.c
gcc -shared -o libshared.so add.o,sub.o,mul.o,div.o
其中第一条编译命令将源代码编译成共享库需要得位置无关代码;第二条编译命令则真正的创建了共享库
之后第一条命令运行后无反应,第二条命令后运行ls应有一下文件 libshared.so即为我们所获得的共享库
之后运行命令
gcc -L./ -Wall main.c -o main -lshared
成功后会获得 main可执行文件
以上即创建调用共享库的过程
创建静态库并调用过程
前面的步骤大体相同
执行命令
- 编译生成目标文件
gcc -c hello.c -wall
- 创建静态库hello
ar crs libhello.a hello.o
- 查看库中符号信息
nm libhello.a
成功截图
生成文件 libhello.a
之后运行命令
gcc -o test test.c -L. -lhello
编译并链接
之后按照要求,不给别人代码
先利用cd命令切换到指定路径
之后可以利用rm 命令进行删除.o和.c文件
输入命令
并且将打包后的动态库和静态库发送给别人