Linux的ranlib到底为静态库添加了什么信息,何时需要用到?
例如我有一个很简单的c文件,用来生成一个静态库:
我编译和生成它
然后比较使用ranlib前后,这个库的大小:
文件大小一样的啊,似乎ranlib什么事情也没有做?
我看它的man:
号称是在库文件里面增添了一些所谓的index信息。这个信息在什么地方,用什么命令能看到?
什么时候需要用到这个信息呢?
$ 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信息。这个信息在什么地方,用什么命令能看到?
什么时候需要用到这个信息呢?
...全文
相关推荐
Linux动态库,静态库,exe的makefile模板
在Linux系统中,开发软件时,我们经常需要创建和使用动态库(.so文件)和静态库(.a文件),以及编译可执行文件(.exe)。这些库提供了代码复用,提高了软件开发效率。
automake和静态库
**lib/Makefile.am**:用于配置生成静态库的相关信息。
函数静态库创建以及测试程序代码
然而,静态链接也会导致最终程序体积增大,因为它包含了静态库的所有代码,即使某些函数没有被用到。此外,每次静态库更新后,使用该库的程序都需要重新编译。
静态库的制作-测试代码
在 Linux 系统中,静态库的构建过程严格依赖于标准工具链,包括 gcc 编译器、ar 归档工具以及 ranlib 工具(尽管现代 ar 已内置索引功能)。
linux-binutils
例如,通过`ar crs`命令,我们可以创建一个新的静态库,并且添加源文件编译后的`.o`文件到库中。`s`参数可以生成内容索引,提升连接速度。


