我了解编译时可执行文件中包含的代码可能来自目标文件(.o文件)和静态链接的库(.lib/.a文件)。这两者在根本上和概念上有什么区别?为什么“目标代码”和“静态链接库”之间有不同的概念?两者的优缺点是什么,为什么要使用一个相对于另一个?可以从目标文件创建静态链接库,反之亦然,可以从静态链接库创建目标文件吗?

最佳答案

目标文件已编译但未链接的代码。库包含目标文件。因此,您的问题变成:“如果我只能使用目标文件,为什么要使用静态链接库?”这就是为什么。

与每个对象都有自己的符号表的对象集合不同,库具有一个统一的符号表,当库开发人员使用ar开关调用s时,会创建一个统一的符号表。 s调用ranlib为该归档文件中的所有对象创建一个统一的符号表。

在shell中运行ranlib会在帮助文本的第一行显示:



并且从通用ranlib docs:



另请参见FreeBSD ranlib docs-不同的措辞,相同的想法:链接速度。

关于c++ - C/C++ : What is the difference between a statically-linked library and an object file?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16313919/

10-11 23:08