设为首页 加入收藏

TOP

Linux下生成静态库.a文件和动态库.so文件
2014-11-24 07:32:35 来源: 作者: 【 】 浏览:1
Tags:Linux 生成 静态 文件 动态 .so

静态库


在linux环境中, 使用ar命令创建静态库文件.如下是命令的选项:


d -----从指定的静态库文件中删除文件


m -----把文件移动到指定的静态库文件中


p -----把静态库文件中指定的文件输出到标准输出


q -----快速地把文件追加到静态库文件中


r -----把文件插入到静态库文件中


t -----显示静态库文件中文件的列表


x -----从静态库文件中提取文件


还有多个修饰符修改以上基本选项,详细请man ar 以下列出三个:


a -----把新的目标文件(*.o)添加到静态库文件中现有文件之后


b -----***************************************之前


v -----使用详细模式


ar 命令的命令行格式如下:


ar [-]{dmpqrtx}[abcfilNoPsSuvV] [membername] [count] archive files...


参数archive定义库的名称, files是库文件中包含的目标文件的清单, 用空格分隔每个文件.


比如创建一个静态库文件的命令如下:


ar -r libapue.a error.o errorlog.o lockreg.o


这样就了libapue.a静态库文件, 可以用 t 选项显示包含在库中的文件


创建库文件之后,可以创建这个静态库文件的索引来帮助提高和库连接的其他程序的编译速度.使用ranlib程序创建库的索引,索引存放在库文件内部.


ranlib libapue.a


用nm程序显示存档文件的索引,它可以显示目标文件的符号


nm libapue.a | more


如果是显示目标文件的符号:


nm error.o | more


如何使用呢 如下所示:


gcc -o test test.c libapue.a


这样就可以在test.c中调用在libapue.a中的函数了.


动态库


1.创建共享库


gcc -shared -o libapue.so error.o errorlog.o


这样就创建了共享库!


2.编译共享库


假设共享库位于当前目录(即跟程序文件相同的目录中)


gcc -o test -L. -lapue test.c


这样就编译出了不包含函数代码可执行文件了,但是但你运行时会发现linux动态加载器打不到libapue.so文件.


可以用ldd 命令查看可执行文件依赖什么共享库:


ldd test


如何才能让动态加载器发现库文件呢 有两种方法可以解决:


LD_LIBRARY_PATH 环境变量


/etc/ld.so.conf文件


1.环境变量


export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:."


2.修改/etc/ld.so.conf文件.位于/etc/ld.so.conf


一般应用程序的库文件不与系统库文件放在同一个目录下,一般把应用程序的共享库文件放在/usr/local/lib下,新建一个属于自己的目录apue,然后把刚才libapue.so复制过去就行了


同时在/etc/ld.so.conf中新增一行:


/usr/local/lib/apue


以后在编译程序时加上编译选项:


-L/usr/local/lib/apue -lapue


这样就可以使用这个libapue.so共享库了!!


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux应用层获取鼠标坐标 下一篇Python在CAM软件Genesis2000中的..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Java 并发工具类:提 (2025-12-25 20:25:44)
·Java面试技巧:如何 (2025-12-25 20:25:41)
·Java并发编程中的线 (2025-12-25 20:25:38)
·C 语言 - cppreferen (2025-12-25 19:50:27)
·《C 语言入门教程》 (2025-12-25 19:50:23)