ubuntu下生成a库和so库

a库和so库分别是linux系统下的静态链接库和动态链接库
linux下.o是目标文件,相当于windows下的.obj文件,
.a是静态链接库。是好多个.o合在一起的,用于静态链接,
.so是静态链接库,是shared object,相当于windows下的.dll文件
一、准备好测试要用的源文件

print.h
ubuntu下生成a库和so库_第1张图片

sum.h
ubuntu下生成a库和so库_第2张图片

test1.c
ubuntu下生成a库和so库_第3张图片

test2.c
ubuntu下生成a库和so库_第4张图片

二、生成a库
将test1.c和test2.c先编译成.o文件,然后将test1.o和test2.o编译生成.a文件,我们可以看到libtest.a文件已经生成

下面我们使用这个a库,在使用a库或者so库时,只需要在主程序中include含有库中提供的函数接口声明的头文件就可以了
新建main.h和main.c文件

ubuntu下生成a库和so库_第5张图片
ubuntu下生成a库和so库_第6张图片
编译运行


二、生成so库

使用so库运行main.c


GCC命令行选项:
-shared 该选项指定生成动态链接库,不用改标志外部程序无法连接,相当于一个可执行文件
-fPIC 表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过拷贝代码的方式来满足不同进程的需要,而不能达到真正的代码段共享的目的
-L. 表示要链接的库在当前目录中

-ltest 编译器查找动态链接时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称
-LD_LIBRARY_PATH 这个环境变量指示动态连接器可以装载动态库的路径(没有root权限)
如果有root权限的话,可以修改/etc/ld.so.conf文件,然后调用/sbin/ldcongfig


你可能感兴趣的:(ubuntu下生成a库和so库)