最新历史版本 :linux中编译静态库(.a)和动态库(.so)的基本方法
来源:互联网 发布:淘宝卖家服务中心电话 编辑:程序博客网 时间:2024/04/27 20:47
静态库
在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共享库了!!
全文结束!!
文章出处:http://dev.10086.cn/cmdn/wiki/index.php?edition-view-7908-1.html
注明:上述方法我并未经过测试。
- 最新历史版本 :linux中编译静态库(.a)和动态库(.so)的基本方法
- linux中编译静态库(.a)和动态库(.so)的基本方法
- linux中编译静态库(.a)和动态库(.so)的基本方法
- linux中编译静态库(.a)和动态库(.so)的基本方法
- linux中编译静态库(.a)和动态库(.so)的基本方法
- linux中编译静态库(.a)和动态库(.so)的基本方法
- linux中编译静态库(.a)和动态库(.so)的基本方法_only you
- linux中编译静态库(.a)和动态库(.so)的基本方法
- linux中编译静态库(.a)和动态库(.so)的基本方法
- linux中编译静态库(.a)和动态库(.so)的基本方法
- linux中编译静态库(.a)和动态库(.so)的基本方法
- linux中编译静态库(.a)和动态库(.so)的基本方法
- linux中静态库(.a)和动态库(.so)
- Linux 动态和静态库(.so & .a)的Makefile模板
- 在Linux中静态库.a和动态库.so 的创建和使用
- QT中添加 动态库(.so) 和 静态库 (.a) 的方法
- 编译执行 静态库.a 和动态库.so区别
- 编译动态链接库.so和静态链接库.a
- Android TabHost风格
- 分区表和主引导记录
- mvp申请资料
- hdu acm steps 2.1.5
- 【java】抽象类的学习
- 最新历史版本 :linux中编译静态库(.a)和动态库(.so)的基本方法
- SQL递归游戏-你厉害吗,来过5关
- 编程技术面试的五大要点
- 最近面试的一些面试题
- UVa Problem 10092 The Problem With the Problem Setter (命题者的难题)
- 如何发表高水平论文
- c#中子线程控制进度条的一个简单例子
- RGB to LAB converter
- VB笔记(一)