我需要" ranlib" /" ar -s"用于静态链接?

时间:2014-08-13 21:05:19

标签: linker gnu binutils ar

如果我需要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特定。

2 个答案:

答案 0 :(得分:7)

如果您使用POSIX兼容系统,。根据{{​​3}}:

  

每当使用ar实用程序创建或更新此类存档的内容时,都会重建符号表。

ar -sranlib的唯一用途是在使用strip命令剥离后重建符号表。

答案 1 :(得分:4)

从构建和使用静态和共享" C"图书馆&#39 ;: (http://docencia.ac.upc.edu/FIB/USO/Bibliografia/unix-c-libraries.html

"创建或修改存档后,需要对其进行索引。编译器稍后使用此索引来加速库内的符号查找,并确保库中符号的顺序在编译期间不重要(当我们深入了解时,这将更好地理解查看本教程末尾的链接过程。"