仓酷云

标题: 来一发Linux体系中静态库和静态库的天生和利用 [打印本页]

作者: 灵魂腐蚀    时间: 2015-1-16 16:03
标题: 来一发Linux体系中静态库和静态库的天生和利用
由于在linux中,用户权限很大,做任何事情都很自由,所以,你往往需要知道你做的每一步在干什么。
1、静态库的创立和利用:
1、天生静态库:库名libmylib.a
arrcslibmylib.amylib.o
2、将静态库copy到/usr/lib/或/lib/目次下
cplibmylib.a/usr/lib/
3、静态库的利用
好比测试文件为test.c
gcc-0testtest.c-lmylib
-l为选项,mylib为库名。mylib为libmylib的两头部分,Linux下商定一切库都之前缀lib入手下手
静态库以.a开头,静态库以.so开头。再编译程式时,无需带上前缀和后缀。
注重:静态库的定名必要以"lib"开首,否者毗连是编译器没法找到库
2、静态库的创立和利用:
1、上面命令把mylib.c程序创立成了一个静态库
(1)、gcc-fPIC-omylib.o-cmylib.c
(2)、gcc-shared-olibttt.somylib.o
也能够间接利用一条命令
gcc-fPIC-shared-olibttt.somylib.c
2、Linux有两种体例挪用静态库毗连中的函数
(1)、gcc-otesttest.c./libttt.so
(2)、cplibttt.so/usr/lib/libttt.so
gcc-otesttest.c/usr/lib/libttt.so
注重:援用静态库时,必需含有路径,假如只是利用libttt.so,则必需确保这个库地点目次包含再PATH情况变量中
3、体系函数利用静态库:
1、void*dlopen(constchar*filename,intflag)
用于翻开指命名字的静态链接库,并前往一个句柄
flag:RTLD_LAZY,RTLD_NEW,RTLD_GLOBAL
RTLD_LAZY:在dlopen()前往前,关于静态库中存在的不决义的变量(如内部变extern,也能够是函数)
不实行剖析,也就是不剖析这个变量的地点
RTLD_NEW:与RTLD_LAZY分歧,在dlopen()前往前,剖析处每一个不决义的变量的地点,假如剖析不出来,dlopen会前往NULL,错位为"undefinedsymbol:xxx..."
RTLD_GLOBAL:是库中被剖析出来的变量在随后的别的链接库中也能够利用,即全局无效。
2、void*dlsym(void*handle,char*symbol)
依据静态链接库的句柄与函数名,前往函数名对应的函数的地点。
3、intdlclose(void*handle)
封闭静态链接库,handle是挪用dlopen函数库的句柄
4、constchar*dlerror(void)
静态库链接库实行失利时,dlerror前往毛病信息,若实行乐成,则前往NULL
例子:
main.c
intmain(void)
{
void*handle;
char*error;
void(*welcome)();
if((handle=dlopen("./libttt.so",RTLD_LAZY))==NULL)
{
printf("dlopenerror
");
return-1;
}
welcome=dlsym(handle,"welcome");
if((error=dlerror())!=NULL)
{
printf("dlsymerror
");
return-1;
}
welcome();
dlclose(handle);
return0;
}
gcc-ldl-omainmain.c
-ldl指明dlopen函数地点的库。
注重:dlopen("./libttt.so",RTLD_LAZY),的目次是在以后目次下,假如不在以后目次下,程序运转毛病
共享库举行更新或安装新库后,必需运转ldconfig命令更新/etc/ld.conf文件中响应的项
假如利用RPM举行安装,一样平常会主动举行更新,不外也不克不及包管这一点。
利用数学库时加上-lm
gcc-lm
库工具利用:
ldd工具
ldd用来显现实行文件必要哪些共享库,共享库装载办理器在那里找到了必要的共享库
</p>
如果你只是想应付一下操作系统的课程,劝你最好别学,或者说不要指望能用的怎么样。
作者: 若天明    时间: 2015-1-18 16:29
Linux操作系统这个名词记得在很早以前就听过,但当时并不知道具体是什么样的操作系统,只知道是一个与嵌入式密切相关的操作系统。
作者: 分手快乐    时间: 2015-1-24 17:41
Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。
作者: admin    时间: 2015-2-2 11:49
下面笔者在论坛看到的一个好问题: “安装红旗4.0后,系统紫光输入法自带的双拼方案和我的习惯不一样,如何自定义双拼方案解决?谢谢?”这个问题很简练。
作者: 灵魂腐蚀    时间: 2015-2-7 19:30
清楚了解网络的基础知识,特别是在Linux下应用知识,如接入internet等等。
作者: 再见西城    时间: 2015-2-23 09:43
即便是非英语国家的人发布技术文档,Linux也都首先翻译成英语在国际学术杂志和网络上发表。
作者: 谁可相欹    时间: 2015-3-7 07:31
最好先搜寻一下论坛是否有您需要的文章。这样可以获得事半功倍的效果。
作者: 精灵巫婆    时间: 2015-3-14 16:53
通过自学老师给的资料和向同学请教,掌握了一些基本的操作,比如挂载优盘,编译程序,在Linux环境下运行,转换目录等等。学了这些基础才能进行下面的模拟OS程序。?
作者: 兰色精灵    时间: 2015-3-21 13:19
在学习linux的工程中,linux学习方法有很多种,这里是小编的学习心得,给大家拿出来分享一下。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2