我了解编译时可执行文件中包含的代码可能来自目标文件(.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/