仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 409|回复: 8
打印 上一主题 下一主题

[其他Linux] 来一发Linux体系中静态库和静态库的天生和利用

[复制链接]
灵魂腐蚀 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 16:03:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
由于在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:04 | 只看该作者
Linux操作系统这个名词记得在很早以前就听过,但当时并不知道具体是什么样的操作系统,只知道是一个与嵌入式密切相关的操作系统。
分手快乐 该用户已被删除
板凳
发表于 2015-1-24 17:41:25 | 只看该作者
Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。
admin 该用户已被删除
地板
发表于 2015-2-2 11:49:09 | 只看该作者
下面笔者在论坛看到的一个好问题: “安装红旗4.0后,系统紫光输入法自带的双拼方案和我的习惯不一样,如何自定义双拼方案解决?谢谢?”这个问题很简练。
灵魂腐蚀 该用户已被删除
5#
 楼主| 发表于 2015-2-7 19:30:41 | 只看该作者
清楚了解网络的基础知识,特别是在Linux下应用知识,如接入internet等等。
再见西城 该用户已被删除
6#
发表于 2015-2-23 09:43:27 | 只看该作者
即便是非英语国家的人发布技术文档,Linux也都首先翻译成英语在国际学术杂志和网络上发表。
谁可相欹 该用户已被删除
7#
发表于 2015-3-7 07:31:13 | 只看该作者
最好先搜寻一下论坛是否有您需要的文章。这样可以获得事半功倍的效果。
精灵巫婆 该用户已被删除
8#
发表于 2015-3-14 16:53:37 | 只看该作者
通过自学老师给的资料和向同学请教,掌握了一些基本的操作,比如挂载优盘,编译程序,在Linux环境下运行,转换目录等等。学了这些基础才能进行下面的模拟OS程序。?
兰色精灵 该用户已被删除
9#
发表于 2015-3-21 13:19:52 | 只看该作者
在学习linux的工程中,linux学习方法有很多种,这里是小编的学习心得,给大家拿出来分享一下。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 02:23

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表