Linux函数库的创建方法

不负年华91

不负年华91

2016-02-19 16:23

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享Linux函数库的创建方法吧。

Linux下的函数库有静态库和动态库,两者有一定的区别,主要在于代码载入的时刻不同,下面图老师小编就给大家介绍下Linux静态库和动态库的创建,一起来学习下吧。

 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

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/diannaorumen/)

用法同静态库,

代码如下:

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’) 库名

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/diannaorumen/)

大写是目录,小写是库。

上面就是Linux中静态库和动态库的创建介绍了,通过本文的介绍相信你已经对Linux库有了一定的了解,静态库和动态的后缀名分别是.a和.so,可别弄错了哦。

展开更多 50%)
分享

猜你喜欢

Linux函数库的创建方法

电脑入门
Linux函数库的创建方法

javascript函数库

Web开发
javascript函数库

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

ASP函数库

Web开发
ASP函数库

ASP实用函数库

ASP
ASP实用函数库

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

网络函数库

编程语言 网络编程
网络函数库

WML Script标准函数库

Web开发
WML Script标准函数库

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Delphi中使用纯正的面向对象方法

Delphi中使用纯正的面向对象方法

MAC内置FTP工具的使用技巧

MAC内置FTP工具的使用技巧
下拉加载更多内容 ↓