c - 为什么我们在C/C++中有两种库?

标签 c

有静态库,然后有共享库。 是否可以只拥有共享的并在需要时静态链接它们?

-fPIC 编译一次,不编译一次似乎是一种浪费。 我对汇编了解不多,但将可重定位代码转换为静态代码的速度难道不应该比重新编译所有内容快几个数量级吗?

最佳答案

这在一定程度上是一个历史问题。曾经只有静态库。它们静态链接到系统编译的每个二进制文件。然而,这代表了维护的噩梦,如果库被修补或更改,则需要重新编译所有使用的包。

然后共享库出现并解决了这些问题。现在针对您的问题,首先,在静态链接库中可以进行一些重要的优化,这是不可能在动态链接库上执行的,因此即使将动态库转换为静态库,它的效率也可能低于首先静态编译的代码。

其次,大多数现代系统无论如何都只使用共享库,所以没有太大问题,东西只编译一次,作为共享库。

顺便说一句,但仍然相关,您可能会查看 prelinking .这一步骤消除了一些启动开销(尽管仍未必达到与静态链接相同的性能)并允许在库中动态链接的软件更快地启动。

关于c - 为什么我们在C/C++中有两种库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34622769/

相关文章:

c - 写入二进制文件

c - 运行服务器进程时动态获取C中未使用的端口号

在flex中创建简单的规则

c - 理解 C 中的结构

c - C中程序堆栈的确切内容是什么?

c - 使用汇编器和 C 接口(interface)执行多项操作

c - 在 2 个对等点之间传输文件时防止超时

c++ - 使用具有不同数据结构的 C 库

c - mmap 有时会失败

c++ - 如何在 Linux (Ubuntu) 上获取 C/C++ 文档的完整路径