linux静态库和动态库的创建与使用

静态库与动态库的创建与使用

1. 基本概念

静态库:链接时,库与编译生成的 .o 文件一起打包到可执行文件中。 linux / windows 下扩展名分别为:.a / .lib
动态库:链接时,不会打包到可执行文件中, 执行时会动态的加载动态库。 linux / windows 下扩展名分别为:.so / .dll

区别主要体现在:

a、可维护性。
合入更新。合入动态库的更新,只要替换库即可。但合入静态则需要重新链接,生成新的可执行程序,全量更新。
环境依赖。若包含静态库,编译成功后不依赖环境。动态库则存在依赖关系,需要环境中存在对应的动态库。
b、大小
空间利用率。若依赖相同静态库,则存在多份拷贝。
可执行文件大小。静态库文件较大。
c、动态库可以实现进程之间的资源共享,因此也称为共享库。

2. 静态库的创建与使用

静态库本质就是一组 .o 组成的压缩文件,扩展名为 .a / .lib

复制代码

代码如下:

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 insert new file(s) into the archive
v: be verbose

使用时,只需在代码中引入 头文件,链接时,指定静态库的搜索路径(-L选项)和静态库名(不需要lib前缀和.a后缀,-l选项)。

复制代码

代码如下:

g++ test.cpp -L../StaticLibrary -lXXX

3. 动态库

Window与Linux执行文件格式不同,在创建动态库的时候有一些差异。

Windows 下执行文件是 PE 格式,动态库需要一个DllMain函数做出初始化的入口,通常在导出函数的声明时需要有_declspec(dllexport)关键字。
Linux下 gcc 编译的执行文件默认是 ELF 格式,不需要初始化入口,亦不需要函数做特别的声明,编写比较方便。
linux 下动态库的命名格式同静态库,为 libXXX.so 格式。

动态库的创建,使用编译器即可,不需要像静态库一样使用专门的打包工具。

若要创建动态库,源码编译时添加 -fPIC 选项,链接时添加 -shared 选项。

复制代码

代码如下:

g++ -fPIC -shared -o libXXX.so xxx.cpp

用法同静态库,

复制代码

代码如下:

g++ test.cpp -L../DynamicLibrary -lXXX

只是需要设置下搜索路径。默认搜索路径:/lib/, /usr/lib。

设置搜索路径:

编辑 /etc/ld.so.conf,设置搜索路径
运行 ldconfig ,重建 /etc/ld.so.cache 文件。设置生效。
4. 相关工具
ldd 查看程序依赖的共享库(动态库)

复制代码

代码如下:

gcc / g++ 参数 -I(大写 'i'),-L(大写'l'),-l(小写'L')

1、 -I(大写 'i') 头文件目录
2、-L(大写'l') 库目录
3、-l(小写'L') 库名

大写是目录,小写是库。

(0)

相关推荐

  • Linux下如何用GCC编译动态库

    本文主要解决以下几个问题 1 为什么要使用库? 2 库的分类 3 创建自己的库 或许大家对自己初学 Linux时的情形仍记忆尤新吧。如果没有一个能较好的解决依赖关系的包管理器,在Linux下安装软件将 ...

  • Linux系统下动态库的生成

    什么是动态库? 动态库又称动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种 ...

  • 如何在Linux桌面环境中使用DeVeDe工具创建视频DVD

    我们都知道DeVeDe能够将视频及文件制作成视频DVD,那么Linux下DeVeDe又该如何使用呢?下面小编就给大家介绍下如何在Linux桌面环境中使用DeVeDe工具创建视频DVD。 DeVeDe是 ...

  • 怎么把截取的qq静态图做成动态图?

    在QQ聊天过程当中,大家可能会经常使用到截屏工具,把一些图片或者信息截图给朋友看,可是每次截屏下来的图片都是静态的,不知道怎么样子能做成动态的,小编给大家带来了怎么把截取的qq静态图做成动态图的制作方 ...

  • Windows系统运行库/游戏运行库组件怎么补全?

    SecuLauncher:failed to start application.[2000], Windows运行库以及游戏运行库不全,运行程序或游戏容易出现各种各样的错误提示。而Windows运行 ...

  • 怎么使用美图秀秀将静态图变为动态拼图?

    手机拍摄的图片可以通过美图秀秀APP将静态变为动态~那么具体要如何操作呢?今天就来教给大家吧~具体如下:1. 打开美图秀秀后,点击"美化图片"2. 选择想要改的图,或者可以现在拍摄 ...

  • 路由器静态ip与动态IP的关系

    很多用户在设置路由器IP地址的时候,经常会遇到静态IP或者动态IP不知道如何选择的问题,其实本质上还是不太了解这两种IP.今天这期我们就来浅谈IP的静态和动态释义,两者的区别,以及在联网的时候怎么选择 ...

  • 如何利用AE把静态图片制作成动态图? ae

    利用after effects软件可以把一张静态图片制作成动态图:下面我们来看下操作过程. 操作方法 01 CTRL+N新建合成: 或者点:合成,新建合成 02 弹出的合成设置中, 我们设置好合成的大 ...

  • 静态图片变为动态图片

    在这里介绍把静态图片变为动态图片的方法,希望本指南能帮到大家. 操作方法 01 启动快剪辑软件,进入到首页,点击新建视频. 02 转到剪辑视频的界面,把图片素材拖入到界面中. 03 点击图片右上角的编 ...