linux 编译静态库 命令,linux中编译静态库(.a)和动态库(.so)的基本方法_onlyyou.docx...

linux中编译静态库(.a)和动态库(.so)的基本方法_only you

linux中编译静态库(.a)和动态库(.so)的基本方法

2007-10-24 14:19 静态库

在 linux

在 linux 环境

中 , 使用 ar 命令创建静态库文件 .如下

是命令的选项 :

d 从指定的静态库文件中删除文件把文件移动到指定的静态库文件中

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

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

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

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

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

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

以下列出三个 :

把新的目标文件(*.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 程序显示存档文件的索引

,它可以显示目标文件的符号

nm libapue.a | more

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

nm error.o | more

如何使用呢 ? 如下所示 :

中的函数了 .

中的函数了 .

这样就可以在 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 共享库了 !!

全文结束 !! 写此文章参考了 :<

Language>>.

这是一本好书 !如果是学习 AT&T 汇编语法 ,建议

阅读此书 !!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值