Linux的ranlib到底为静态库添加了什么信息,何时需要用到?

bdfdui 2016-10-03 03:52:56
例如我有一个很简单的c文件,用来生成一个静态库:

$ cat o.c
#include<stdio.h>
int f(){
printf("hello\n");
return 2;
}

我编译和生成它

gcc -o o.o -c o.c
ar rc libmyobject.a o.o
cp libmyobject.a libmyobject.a.keep
ranlib libmyobject.a

然后比较使用ranlib前后,这个库的大小:

-rw-rw-r-- 1 a a 1626 Oct 3 12:03 libmyobject.a.keep
-rw-rw-r-- 1 a a 1626 Oct 3 12:06 libmyobject.a

文件大小一样的啊,似乎ranlib什么事情也没有做?
我看它的man:

DESCRIPTION
ranlib generates an index to the contents of an archive and stores it in the archive. The index lists each symbol defined by a member of an archive that is a relocatable object file.

号称是在库文件里面增添了一些所谓的index信息。这个信息在什么地方,用什么命令能看到?
什么时候需要用到这个信息呢?
...全文
488 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuxuyayaya23 2016-10-08
  • 打赏
  • 举报
回复
引用 1楼FMadot 的回复:
我只知道Unix需要ranlib这一步,现在的Linux已经不需要了,应该是ar时已经添加了信息。
nswcfd 2016-10-05
  • 打赏
  • 举报
回复
You may use nm -s or nm --print-armap to list this index table. If an archive lacks the table, another form of ar called ranlib can be used to add just the table.
nswcfd 2016-10-05
  • 打赏
  • 举报
回复
就像man里一样,加了index/索引,不需要遍历就能快速定位某个symbol在什么位置。
hijack00 2016-10-04
  • 打赏
  • 举报
回复
单从大小看不出什么吧?也有可能只是对原文件中的目标文件进行了重新排列呢,这样并不会增加文件体积。 感觉ranlib只是对ar生成的静态库做了一些优化,实际使用ranlib后的库应该和直接使用ar生成的库没什么太大区别
FMadot 2016-10-03
  • 打赏
  • 举报
回复
我只知道Unix需要ranlib这一步,现在的Linux已经不需要了,应该是ar时已经添加了信息。

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧