C++学习(三六八)工具链ar和ranlib

Posted hankern

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++学习(三六八)工具链ar和ranlib相关的知识,希望对你有一定的参考价值。

ranlib对静态库的符号索引表进行更新

GNU工具中ar是用来制作库文件.a的,但同时还提供了一个ranlib,从手册上看ranlib相当于ar -s,为什么这样呢?

这是由于最早在Unix系统上ar程序是单纯用来打包多个.o到.a(类似于tar做的事情),而不处理.o里的符号表。Linker程序则需 要.a文件提供一个完整的符号表,所以当时就写了单独的ranlib程序用来产生linker所需要的符号信息。也就是说,产生一个对linker合 格的的.a文件需要做ar和ranlib两步 。

很快,Unix厂商就发现ranlib做得事情完全可以合并到ar里面去,于是ar程序的升级版本就包括了ranlib的功能,但早期的很多项目的Makefile都已经是按照两步式的方法生成.a,所以为了保证这些早期文件的兼容性,ranlib被保留下来了。

如今,GNU/Linux系统上,ranlib依然存在,当然大部分项目已经不使用它了,因为ar -s就做了ranlib的工作。
历史通常是进步和妥协的混合!

以上是关于C++学习(三六八)工具链ar和ranlib的主要内容,如果未能解决你的问题,请参考以下文章

C++学习(二六八)CMake命令和变量的大小写

C++学习(三六零)bash常用命令

C++学习(三六二)sed

C++学习(四三六)java字符串操作

C++学习(三六五)linux windows mac行结尾

C++学习(三三六)球面贴图Sphere mapping 立方体贴图Cube mapping