为什么 g++ 链接标准库
Why does g++ link the standard library?
我有一段简单的 c++ 代码:
#include <iostream>
using namespace std;
int main ()
{
cout << "Hello World!";
return 0;
}
当我生成此代码的程序集时,我得到了一个巨大的程序集文件,我认为这是标准库的编译。为什么会发生这种情况,我该如何防止?
大部分标准库由模板组成。当您使用模板时,它会专门供您使用,并且专用化将成为二进制文件的一部分。这是无法避免的,尽管您可以使用 extern 模板确保仅在单个翻译单元中进行专业化。
std::cout 是标准库的一部分。
你用过它。
真的很明显。
Iostreams是模板,因此代码在您的对象中发出,而不是在共享库中发出,但在启用优化的情况下,(剥离)大小不应大于实现helloworld所需的大小。
有关另一个答案,请参阅 http://www2.research.att.com/~bs/bs_faq.html#Hello-world。
相关文章:
- 在Qt中链接具有非标准名称的lib文件
- C++标准是否定义了结构中成员函数的函数内定义是否必须具有静态链接?
- 在线C++标准草案的更新是否会使指向它的链接无效?
- 从 ASM 调用C++代码中标准库的链接
- g++是否将C标准库的名称声明为外部"C"链接或外部"C++"?
- 标准::字符串::空的未定义符号错误;Mac OS High Sierra 上的 c++ 标准方法链接错误
- 如何与标准库进行静态链接C++?
- 如何将 Boost 库与 CMake 链接(如果 boost 位于非标准位置,则在集群上)?
- 在标准库中静态链接时,如何支持动态插件
- C++命名空间std的定义方式/位置(文档/标准链接)
- 使用CMake时出现非标准扩展链接错误
- 使用标准库(静态)编译静态库链接
- C 标准:DO命名空间constexpr变量具有内部链接
- 在C++代码中包含标准 C 标头在链接规范(外部"C"、外部"C++")中,指定的行为是什么?
- Linux:C/C++标准库静态链接与动态链接
- VC++ 标准库链接错误
- 标准库中的双链接循环列表
- VS 链接器失败,标准::字符串方法出现"object already exists"错误
- 链接没有标准名称/扩展名的库
- RIOS X Mavericks上使用clang++构建的内部示例在链接上找不到STL标准库