Linux下的静态库和动态库

Linux下的静态库和动态库,第1张

静态库

可以把它想象成是一些代码的集合,在可执行程序运行前就已经加到了代码中,成为了执行程序的一部分,一般是以.a为后缀的文件名,Windows下后缀为.lib。静态库的命名也分为三部分,1、前缀:lib,2、库的名称:随意,如lisi,3、后缀:.a。

静态库优缺点

上面简单介绍了静态库,那它自然也会有优缺点,这里来介绍下它的优缺点。

优点:1、在最后,函数库是被打包到应用程序中的,实现函数本地化、寻址方便、高效。2、程序在运行的时候,与函数库没有关系,移植性更强。

缺点:1、消耗资源较大,每个进程在使用静态库的时候,都要复制一份才可以,这也就造成了内存的消耗。2、在程序更新、部署、发布的时候,使用静态库相对麻烦,如果一个静态库更新了,那它的应用程序都需要重新编译,再发送给用户,有的时候可能只是一个小的改动,但对于用户来说,会导致整个程序重新下载。

动态库

在程序编译时不会被连接到目标代码中,在后期运行时才会载入,不同的应用程序如果调用相同的库,内存中只有一份共享库的拷贝,也就避免了空间的浪费问题。一般以.so作为文件后缀名,也分为三部分:1、前缀:lib,2、库名称:自定义,3、后缀:.so

动态库优缺点

优点:1、节省内存2、部署、升级相对方便,只需要更换动态库,再重新启动服务即可。

缺点:1、加载速度比静态库慢2、移植性较差,需要把所有用到的动态库进行移植。

1、下载源码,解压缩sqlite-autoconf-3300100.tar.gz

2、进入解压目录,执行:

#:./configure --host=arm CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++ --prefix=/usr

其中--host=要运行程序的主机

CC/CXX为用到的交叉编译工具链

--prefix=安装目录

3、make

将在当前文件目录下,自动生成可执行文件sqlite3及静态库文件sqlite3.a文件;

4、sudo make install

此命令会将可执行文件及静态库文件拷贝至安装目录中(也可手动拷贝)

5、以上步骤生成的可执行文件包含大量调试信息,文件比较大,可使用strip命令去掉其中的调试信息;

#:arm-linux-gnueabi-strip sqlite3

6、生成动态库文件:

arm-linux-gnueabi-gcc sqlite3.c -lpthread -ldl -fPIC-shared-o libsqlite3.so

交叉编译sqlite3,生成动态库

标签:ref gcc host pthread strip config 安装 目录 工具链


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/6045916.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-12
下一篇 2023-03-12

发表评论

登录后才能评论

评论列表(0条)

保存