如果我需要ranlib
/ ar -s
静态链接,我没有找到任何正确的信息。
假设我有一个由多个模块组成的应用程序。每个模块都将其代码文件放在自己的文件夹中,目标文件在自己的文件夹中创建:module1/%.c → bin/module1/%.o
。对于每个模块,我创建了一个.a
文件:ar -rc bin/module1.a bin/module1/….o
。整个程序使用gcc bin/module1.a … moduleN.a -o bin/app
编译。
在这种情况下为.a
文件创建索引的内容是什么?即使我没有为.a
文件添加索引,编译和程序也能正常工作。但是我在最后一个目标文件之后发现的每个例子都被称为ranlib
。
问题不在于Linux / Mac / Windows特定。
答案 0 :(得分:7)
如果您使用POSIX兼容系统,否。根据{{3}}:
每当使用ar实用程序创建或更新此类存档的内容时,都会重建符号表。
ar -s
或ranlib
的唯一用途是在使用strip
命令剥离后重建符号表。
答案 1 :(得分:4)
从构建和使用静态和共享" C"图书馆&#39 ;: (http://docencia.ac.upc.edu/FIB/USO/Bibliografia/unix-c-libraries.html)
"创建或修改存档后,需要对其进行索引。编译器稍后使用此索引来加速库内的符号查找,并确保库中符号的顺序在编译期间不重要(当我们深入了解时,这将更好地理解查看本教程末尾的链接过程。"