C标准库是动态库还是静态库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C标准库是动态库还是静态库相关的知识,希望对你有一定的参考价值。

参考技术A C标准库是动态库,所有运行的程序共享一个C标准库的代码段。

静态和动态链接库

【中文标题】静态和动态链接库【英文标题】:Static and Dynamic Linking Libraries 【发布时间】:2013-08-23 11:53:43 【问题描述】:

我有一些关于链接库的问题。

链接器如何决定我要链接的库是静态链接还是动态链接?是由文件扩展名(.a/.so)决定的吗?

是否可以动态链接 .a 库?

是否可以在没有源的情况下将 .a 库转换为 .so 库?

【问题讨论】:

是的,不,不。您通常需要位置独立编译代码以使其可用作共享库;除非明确要求,否则通常不会这样做。 @KerrekSB 这不应该是一个答案吗? 【参考方案1】:
    链接器通常通过查看扩展来决定如何链接库,但这在很大程度上取决于链接器。 AIX 链接器有一些相当奇特的行为。此外,如果您在同一位置同时拥有 .so 和 .so 版本的库,则您为链接器提供的命令行开关将确定它使用哪个版本 有点。您可以将 .a 链接到 .so 但会出现性能问题 - 共享库应使用与位置无关的代码构建以获得最佳性能。并且根据代码,链接器可能会拒绝链接它,因为它无法修补重定位信息。但是您不能告诉链接器将 .a 视为 .so 如上 - 也许。

【讨论】:

【参考方案2】:

默认情况下,gcc 链接器将动态链接到 .so 文件,如果在其搜索路径中找到这两种类型的库。您可以使用命令行参数覆盖它,如here 所述。

【讨论】:

以上是关于C标准库是动态库还是静态库的主要内容,如果未能解决你的问题,请参考以下文章

关于动态库和静态库的问题。

Linux下的静态库和动态库

小白学习C++ 教程二十三如何安装和使用 C++ 标准库

小白学习C++ 教程二十三如何安装和使用 C++ 标准库

如何创建标准库

电脑里的动态连接库是啥意思?如果打开文件经常与它连接不上是啥回事该怎么办?