6

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 特定的。

4

2 回答 2

8

如果您使用的是与 POSIX 兼容的系统,则没有. 根据规范

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

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

于 2016-07-07T11:22:36.677 回答
4

来自“构建和使用静态和共享的“C”库”:(http://docencia.ac.upc.edu/FIB/USO/Bibliografia/unix-c-libraries.html

“创建或修改档案后,需要对其进行索引。编译器稍后使用此索引来加速库内的符号查找,并确保库中符号的顺序胜出在编译期间无关紧要(当我们在本教程末尾更深入地了解链接过程时会更好地理解这一点)。”

于 2014-08-18T09:57:46.713 回答