使用 gcc 编译时,编译器和链接器何时需要使用标志 -stdlib=libstdc++
?
编译器会自动使用 libstdc++ 吗?
我在 Ubuntu 13.10 上使用 gcc4.8.2,我想使用 c++11 标准。我已经将 -std=c++11
传递给编译器。
原文由 Raymond Valdes 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用 gcc 编译时,编译器和链接器何时需要使用标志 -stdlib=libstdc++
?
编译器会自动使用 libstdc++ 吗?
我在 Ubuntu 13.10 上使用 gcc4.8.2,我想使用 c++11 标准。我已经将 -std=c++11
传递给编译器。
原文由 Raymond Valdes 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
在 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