怎样创建Linux静态库和动态库
1. 基本概念
静态库:链接时,库与编译生成的 .o 文件一起打包到可执行文件中。 linux / windows 下扩展名分别为:.a /
动态库:链接时,不会打包到可执行文件中, 执行时会动态的加载动态库。 linux / windows 下扩展名分别为: /
区别主要体现在:
a、可维护性。
合入更新。合入动态库的更新,只要替换库即可。但合入静态则需要重新链接,生成新的可执行程序,全量更新。
环境依赖。若包含静态库,编译成功后不依赖环境。动态库则存在依赖关系,需要环境中存在对应的动态库。
b、大小
空间利用率。若依赖相同静态库,则存在多份拷贝。
可执行文件大小。静态库文件较大。
c、动态库可以实现进程之间的资源共享,因此也称为共享库。
2. 静态库的创建与使用
静态库本质就是一组 .o 组成的压缩文件,扩展名为 .a /
代码如下:
ar -crv libXXX.a mmmm.o nnnn.o
XXX 是库名,mmmm.o nnnn.o 是要打包的目标文件。crv 参数,含义分别是
c: do not warn if the library had to be created
r: replace existing or new file(s) into the archive
v: be verbose
使用时,只需在代码中引入 头文件,链接时,指定静态库的搜索路径(-L选项)和静态库名(不需要lib前缀和.a后缀,-l选项)。
代码如下:
g++ -L.。/StaticLibrary -lXXX
3. 动态库
Window与Linux执行文件格式不同,在创建动态库的时候有一些差异。
Windows 下执行文件是 PE 格式,动态库需要一个DllMain函数做出初始化的入口,通常在导出函数的'声明时需要有_declspec(dllexport)关键字。
Linux下 gcc 编译的执行文件默认是 ELF 格式,不需要初始化入口,亦不需要函数做特别的声明,编写比较方便。
linux 下动态库的命名格式同静态库,为 格式。
动态库的创建,使用编译器即可,不需要像静态库一样使用专门的打包工具。
若要创建动态库,源码编译时添加 -fPIC 选项,链接时添加 -shared 选项。
代码如下:
g++ -fPIC -shared -o
用法同静态库,
代码如下:
g++ -L.。/DynamicLibrary -lXXX
只是需要设置下搜索路径。默认搜索路径:/lib/, /usr/lib。
设置搜索路径:
编辑 /etc/,设置搜索路径
运行 ldconfig ,重建 /etc/e 文件。设置生效。
4. 相关工具
ldd 查看程序依赖的共享库(动态库)
代码如下:
gcc / g++ 参数 -I(大写 ‘i’),-L(大写‘l’),-l(小写‘L’)
1、 -I(大写 ‘i’) 头文件目录
2、-L(大写‘l’) 库目录
3、-l(小写‘L’) 库名
大写是目录,小写是库。
-
初学者学习linux操作系统用什么版本
初学者学习linux操作系统,用哪个版本比较好,能学以致用,下面是本站小编分享的一些相关资料,供大家参考。学Linux,如果你现在对windows没什么认识的话可能要容易学一点。如果你现在对windows比较熟悉或有较深了解,那可能难度要大点。我总结的经验是,初学linux,要把自己...
-
dos下的edit命令使用详解
导语:edit命令是一个简单的编辑软件,我们经常用它来编辑一些程序和批处理文件。下面就由小编为大家介绍一下dos下的edit命令使用详解,大家一起去看看吧!比如,我想在c盘根目录下编辑一个简单的批处理文件,要求无论当前盘和当前目录如何,每次只需输入一个字符w,然后回车...
-
linux实训心得体会
我们在一些事情上受到启发后,可以将其记录在心得体会中,这样有利于我们不断提升自我。那么心得体会怎么写才能感染读者呢?以下是小编帮大家整理的linux实训心得体会,仅供参考,欢迎大家阅读。linux实训心得体会1本学期对于Linux系统的学习,让我对Linux有了一定的了解...
-
win7任务栏跑到右边怎么办
电脑任务栏怎么还原?电脑罢工,有时候会出现比较奇葩的状况,比如任务栏跑到右边去了。电脑任务栏怎么还原的方法其实很简单,和小编一起来看看吧!win7任务栏跑到右边怎么办一、设置属性还原任务栏1、右键任务栏,然后将“锁定任务栏”的前面的勾去掉2、再右键任务栏--...