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

所以,我的问题是:

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

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

【问题讨论】:

  • 你的第一句话完全不正确。你的问题是基于一个错误的前提。即使这是真的,即使有一个符号没有“以源形式导出”这一事实也足以解释,因此您的问题也依赖于不合逻辑。

标签: c++ linux unix posix standards


【解决方案1】:

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

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

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

【讨论】:

  • 外部模板不是被弃用了吗,因为没人知道这意味着什么?
  • @ShacharShemesh:exported 模板被removed(不仅仅是弃用),尽管主要是因为它们没有完全交付他们想要交付的东西,并且大多数实施者不想实施它们。关于extern 模板没有任何问题或难以理解:extern 模板只是声明不应对声明的实例进行隐式实例化。相反,将提供合适的显式实例化。
猜你喜欢
  • 2019-06-09
  • 1970-01-01
  • 2014-06-18
  • 2017-02-26
  • 2011-04-03
  • 2017-07-27
  • 2020-09-21
  • 2020-03-09
  • 2018-12-24
相关资源
最近更新 更多