什么时候需要使用标志 -stdlib=libstdc ?

新手上路,请多包涵

使用 gcc 编译时,编译器和链接器何时需要使用标志 -stdlib=libstdc++

编译器会自动使用 libstdc++ 吗?

我在 Ubuntu 13.10 上使用 gcc4.8.2,我想使用 c++11 标准。我已经将 -std=c++11 传递给编译器。

原文由 Raymond Valdes 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 684
2 个回答

在 Linux 上:通常,所有常用的 linux 发行版都默认使用 libstdc++,所有现代版本的 GCC 都带有支持 C++11 的 libstdc++。如果要在此处编译 c++11 代码,请使用以下之一:

  • g++ -std=c++11 input.cxx -o a.out (通常是GNU编译器)
  • g++ -std=gnu++11 input.cxx -o a.out

在 Mavericks 之前的 OS X 上g++ 实际上是 clang++ 的别名,Apple 的旧版本 libstdc++ 是默认设置。您可以通过传递 -stdlib=libc++ 来使用 libc++(其中包括 c++11 库支持)。如果要在此处编译 c++11 代码,请使用以下之一:

  • g++ -std=c++11 -stdlib=libc++ input.cxx -o a.out (clang,不是 GNU 编译器!)
  • g++ -std=gnu++11 -stdlib=libc++ input.cxx -o a.out (clang,不是 GNU 编译器!)
  • clang++ -std=c++11 -stdlib=libc++ input.cxx -o a.out
  • clang++ -std=gnu++11 -stdlib=libc++ input.cxx -o a.out

在 OS X 上,因为 Mavericks : libc++ 是默认值,你不应该传递任何 -stdlib=<...> 标志。从 Xcode 10 开始, 不再支持针对 libstdc++ 构建。针对 libstdc++ 构建的现有代码将继续工作,因为仍然提供 libstdc++.6.dylib ,但不支持针对 libstdc++ 编译新代码。

  • clang++ -std=c++11 input.cxx -o a.out
  • clang++ -std=gnu++11 input.cxx -o a.out

原文由 Bill Lynch 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您使用 g++ 前端,而不是 gcc 前端,编译器会自动使用 libstdc++。

原文由 Torsten Robitzki 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题