Linux中的动态库与静态库

一、静态库和动态库

1、静态库
静态函数库,是函数执行前(编译)就加到目标程序中去了。
优点:
(1)、运行快。
(2)、发布程序无需提供静态库,因为已经在APP中,移植方便。
缺点:
(1)、 程序大。
(2)、链接时完整地拷贝至可执行文件中,别多次使用就有多份冗余拷贝。
(3)、更新,部署,发布较为麻烦

2,、动态库
动态函数库,是程序执行时(临时)动态到目标程序中去
优点:
(1)、程序小
(2)、链接时不复制,程序运行时由系统动态加载到内存,供内存调用,系统只加载一次,多个程序可以共用,节省内存。
缺点:
(1)、运行慢
(2)、发布程序需要提供依赖的动态库。

以上部分出自:https://blog.youkuaiyun.com/wk_bjut_edu_cn/article/details/81735956

二、静态库的制作与使用

(一)、静态库的制作

格式: libxxx.a
库名为xxx,后缀是 .a

步骤:
原材料:源代码.c 或 .cpp
(a)用.c文件生成 .o文件——例:gcc Jia.c -c
(b)xxx.o文件生成xxx.a静态库文件——例:ar rcs libtest.a Jia.o(可以打包多个 .o文件)

例子:
在这里插入图片描述
(二)、静态库的使用(注意需要有头文件)

步骤:

(a)编译:gcc JiaMian.c -ltest -L ./ -o aaa

说明:
主函数c文件 -l库名 -L 路径 -o 可执行文件名
-l是要指定要用的静态库
-L告诉gcc编译器从-L指定的路径去找静态库,默认从 /usr/lib 或 /usr/local/lib 路径下去找。

(b)执行:做完步骤(a)就可以执行可执行文件了
例子:
在这里插入图片描述

三、动态库的制作与使用

(一)、动态库的制作

格式: libxxx.so
库名为xxx,后缀是 .so

gcc -shared -fpic Jia.c -o libcalc.so

-shared——指定生产动态库
-fpic——作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码。

在这里插入图片描述

(二)、动态库的使用(注意需要有头文件)

(a)编译:gcc JiaMian.c -lcalc -L ./ -o aaa(与静态库的使用一样)

(b)执行:通常需要建一个shell脚本,在脚本中输入下面内容:

export LD_LIBRARY_PATH="/home/pi/ZCB" //在 LD_LIBRARY_PATH 所指定的路径下去找库文件(一般是自己建的动态库所在路径)

./aaa	//生成的可执行文件

注意 :不能像静态库那样直接 ./aaa ,这样的话会报错。

例子:

在这里插入图片描述
tu在这里插入图片描述
图中语句 chmod +x start.sh 目的是给该脚本加可执行权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值