linux静态库和动态库的创建与使用
静态和动态库的创建和使用
1。基本概念
静态库:当链接被链接时,该库被打包在一个可执行文件中,该文件是已编译的O文件。
动态库:链接未打包成可执行文件,动态库在执行时动态加载。
差异主要体现在:
可维护性。
加入更新。更新的动态库,只是取代图书馆。但需要重新生成新的可执行程序全部更新。
环境依赖性。如果包含静态库,编译成功后编译器不依赖环境。动态库与环境中相应的动态库的存在有依赖关系。
B,大小
空间利用率。如果依赖相同的静态库,则有多个副本。
可执行文件大小。静态库文件大。
动态库可以实现进程间的资源共享,因此也称为共享库。
2的创建和使用。静态库
静态库本质上是一组O压缩文件,其中有一个扩展名为。
复制代码代码如下所示:
AR CRV libxxx,嗯,啊啊嗯。
XXX是图书馆的名字,嗯,啊,nnnn。O是把目标file.crv参数,意思是
C:不要警告库是否被创建
r:替换现有或插入新文件到归档文件中
V:罗嗦
使用时,只需要在代码链接介绍一个头文件,指定搜索路径的静态库(-l选项)和静态库名(不需要前缀和后缀,-l选项)。
复制代码代码如下所示:
g++ test.cpp L.。 / staticlibrary -八十
三.动态库
窗口与Linux可执行文件格式不同,在创建动态库时存在一些差异。
windows下的可执行文件是PE格式。动态库需要DllMain函数初始化录入。通常,当出口函数声明,_declspec(dllexport)的关键是需要的。
在Linux下编译的GCC缺省是默认的ELF格式,不需要初始化条目,不需要一个特殊声明的函数,而且编写起来很方便。
Linux下动态库的名称格式为静态库一样,这是libxxx.so格式。
使用编译器创建动态库,不需要使用像静态库这样的专门的打包工具。
创建一个动态库,加上-fPIC选项时,源代码被编译,并添加共享选项时,链接链接。
复制代码代码如下所示:
G + -fPIC共享- O libxxx.so xxx.cpp
使用相同的静态库,
复制代码代码如下所示:
g++ test.cpp L.。 /动态库-八十
你只需要设置搜索路径,默认的搜索路径: / / / lib,usr / lib。
设置搜索路径:
编辑 / / ld.so.conf等,设置搜索路径
要想运行和重建 / / ld.so.cache等文件的设置是有效的。
4。相关的工具
LDD查看程序相关的共享库(动态库)
复制代码代码如下所示:
GCC和G++参数-我(uppercase'i '),L(capital'l '),L(lowercase'l)
1、我(uppercase'i)的头文件目录
2、L(uppercase'l)图书馆目录
3、L(lowercase'l ')库名
大写是一个目录,小写是一个库。