为啥我们需要 libstdc++.so?

Posted

技术标签:

【中文标题】为啥我们需要 libstdc++.so?【英文标题】:Why does we need libstdc++.so?为什么我们需要 libstdc++.so? 【发布时间】:2016-10-16 06:20:06 【问题描述】: C++ 标准库的大多数组件都以源代码导出 代码形式,即仅在头文件中提供。 C 库的大部分函数由 libc.so 提供。

所以,我的问题是:

为什么我们需要 libstdc++.so?

libstdc++.so 中有哪些内容?

【问题讨论】:

自己看看:github.com/gcc-mirror/gcc/tree/master/libstdc%2B%2B-v3/src 你的第一句话完全不正确。你的问题是基于一个错误的前提。即使这是真的,即使有一个符号没有“以源形式导出”这一事实也足以解释,因此您的问题也依赖于不合逻辑。 【参考方案1】:

库中定义了很多符号。值得注意的是,大部分语言支持和所有标准库异常类都在库中定义。

即使标准 C++ 库中的许多组件都是模板,因此具有内联定义,但它们确实受益于显式实例化。使用 iostreams 库的显式实例化(并将它们声明为 extern 模板)大大缩短了编译时间。

要找出库中定义了哪些符号,请使用nm:它将打印库定义和引用的符号。名称可能会被破坏,这将通过将结果传递到合适的 c++filt 来修复。

【讨论】:

外部模板不是被弃用了吗,因为没人知道这意味着什么? @ShacharShemesh:exported 模板被removed(不仅仅是弃用),尽管主要是因为它们没有完全交付他们想要交付的东西,并且大多数实施者不想实施它们。关于extern 模板没有任何问题或难以理解:extern 模板只是声明不应对声明的实例进行隐式实例化。相反,将提供合适的显式实例化。

以上是关于为啥我们需要 libstdc++.so?的主要内容,如果未能解决你的问题,请参考以下文章

linux中把.c的文件编译成.so

linux libstdc++.a和libstdc++.so功能一样吗

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

libstdc++.so.6 是linux自带的吗? 安装完linux就有了?还是另外需要额外安装的软件?

如何更新 libstdc++.so.6 或更改要在 Tensorflow、Python 上使用的文件

如何更改 libstdc++.so.6 的版本?