Linker 我需要什么;ranlib";/&引用;ar-s";对于静态链接?

Linker 我需要什么;ranlib";/&引用;ar-s";对于静态链接?,linker,gnu,binutils,unix-ar,Linker,Gnu,Binutils,Unix 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文件创建索引的作用是什么?编

如果以及为什么我需要
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特定的。

来自“构建和使用静态和共享的“C”库”: ()


创建或修改存档文件后,需要对其编制索引。编译器稍后使用此索引加快库中的符号查找,并确保库中符号的顺序在编译过程中无关紧要(在本教程结束时,当我们更深入地了解链接过程时,我们会更好地理解这一点)。“

如果您使用的是POSIX兼容系统,则不会。根据:

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

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