您的位置 首页 培训

静态库和动态库 Linux体系程序设计之路

Linux中有两类函数库,分别是静态库和动态库。静态函数库:这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个函数库的所有数

Linux中有两类函数库,分别是静态库和动态库。

静态函数库:

这类库的姓名一般是libxxx.a;运用静态函数库编译成的文件比较大,由于整个函数库的一切数据都会被整合进方针代码中,他的长处就清楚明了了,即编译后的履行程序不需求外部的函数库支撑,由于一切运用的函数都现已被编译进去了。当然这也会成为他的缺陷,由于假如静态函数库改动了,那么你的程序有必要从头编译。

动态函数库:

这类库的姓名一般是libxxx.so;相对于静态函数库,动态函数库在编译的时分并没有被编译进方针代码中,你的程序履行到相关函数时才调用该函数库里的相应函数,因而动态函数库所发生的可履行文件比较小。由于函数库没有被整合进你的程序,而是程序运转时动态的请求并调用,所以程序的运转环境中有必要供给相应的库。动态函数库的改动并不影响你的程序,所以动态函数库的晋级比较便利。

linux体系有几个重要的目录寄存相应的函数库,如/lib /usr/lib。

下面来介绍linux静态函数库的创立和运用:

例程str_out.h str_out.c main.c:

str_out.h

#ifndef STR_OUT_H

#define STR_OUT_H

void str_out(const char* str);

#endif

str_out.c

#include

#include str_out.h

void str_out(const char* str){

printf(%s\n,str);

}

main.c

int main()

{

str_out(hello world);

return 0;

}

不管是静态函数库仍是动态函数库,都是由*.o方针文件生成。

所以先gcc -c str_out.c

静态函数库由ar指令创立

本例:ar -cr libstr_out.a str_out.o

-c create的意思

-r replace的意思,表明当刺进的模块名现已在库中存在,则替换同名的模块。假如若干模块中有一个模块在库中不存在,ar显现一个过错音讯,并不替换其他同名模块。默许的情况下,新的成员添加在库的结尾处,能够运用其他任选项来改动添加的方位。

到此静态函数库创立结束。

运用办法:经过gcc -o out main.c -L. -lstr_out编译main.c就会把静态函数库整合进out。

其间

-L指定静态函数库的方位供查找,留意L后边还有’.’,表明静态函数库在本目录下查找。

-l则指定了静态函数库名,由于静态函数库的命名办法是lib***.a,其间的lib和.a疏忽。

依据静态函数库的特性,此处删去libstr_out.a后out仍然能够运转,由于静态库的内容现已整合进去了。

动态函数库的创立和运用

gcc -shared -fPCI -o out main.c -L. -lstr_out

用该指令生成libstr_out.so 动态函数库。

gcc -o out main.c

此刻还不能当即./out,由于在动态函数库运用时,会查找/usr/lib /lib目录下的动态函数库,而此刻咱们生成的库不在里边。

这个时分有好几种办法能够让他成功运转:

最直接最简略的办法便是把libstr_out.so拉到/usr/lib 或/lib中去。

还有一种办法 export LD_LIBRARY_PATH=$(pwd)

别的还能够在/etc/ld.so.conf文件里参加咱们生成的库的目录,然后/sbin/ldconfig。

/etc/ld.so.conf是非常重要的一个目录,里边寄存的是链接器和加载器查找同享库时要查看的目录,默许是从/usr/lib /lib中读取的,所以想要顺畅运转,咱们也能够把咱们库的目录参加到这个文件中并履行/sbin/ldconfig

别的还有个文件需求了解/etc/ld.so.cache,里边保存了常用的动态函数库,且会先把他们加载到内存中,由于内存的拜访速度远远大于硬盘的拜访速度,这样能够进步软件加载动态函数库的速度了。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/peixun/321233.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部