在使用gcc编译时,何时需要使用标志-stdlib=libstdc++
作为编译器和链接器?
编译器是否自动使用libstdc ++?
我在Ubuntu 13.10上使用gcc4.8.2,我想使用c ++ 11标准。我已将-std=c++11
传递给编译器。
答案 0 :(得分:72)
在Linux上:一般来说,所有常用的Linux发行版默认使用libstdc ++,所有现代版本的GCC都附带一个支持C ++ 11的libstdc ++。如果要在此处编译c ++ 11代码,请使用以下方法之一:
g++ -std=c++11 input.cxx -o a.out
g++ -std=gnu++11 input.cxx -o a.out
在小牛队之前的OS X上:g++
实际上是clang++
的别名,Apple的旧版libstdc ++是默认的。您可以通过传递-stdlib=libc++
来使用libc ++(包括c ++ 11库支持)。如果要在此处编译c ++ 11代码,请使用以下方法之一:
g++ -std=c++11 -stdlib=libc++ input.cxx -o a.out
g++ -std=gnu++11 -stdlib=libc++ input.cxx -o a.out
clang++ -std=c++11 -stdlib=libc++ input.cxx -o a.out
clang++ -std=gnu++11 -stdlib=libc++ input.cxx -o a.out
自Mavericks以来在OS X上:libc ++是默认值。您可以通过传递-stdlib=libstdc++
clang++ -std=c++11 input.cxx -o a.out
clang++ -std=gnu++11 input.cxx -o a.out
答案 1 :(得分:13)
在使用gcc编译时,何时需要使用标志
-stdlib=libstdc++
作为编译器和链接器?
简短回答:从不
更长的回答:-stdlib
是一个Clang标志,不适用于任何版本的GCC。在Mac OS X上,有时gcc
和g++
命令实际上是Clang 不 GCC的别名,而Apple发布的libstdc ++版本古代 (大约2008年)当然它不支持C ++ 11。这意味着在OS X上使用Clang-pretending-to-GCC时,您可以使用-stdlib=libc++
选择Clang的新C ++ 11兼容库,或者您可以使用-stdlib=libstdc++
来选择pre-C ++ 11古董版libstdc ++,属于博物馆。但是在GNU / Linux上gcc
和g++
实际上是GCC而不是Clang,因此-stdlib
选项根本不起作用。
编译器是否自动使用libstdc ++?
是的,GCC总是使用libstdc ++,除非你告诉它使用没有标准库和-nostdlib
选项(在这种情况下你需要避免使用任何标准库功能,或使用-I
和-L
和-l
标记将其指向另一组标题和库文件。)
我在Ubuntu 13.10上使用gcc4.8.2,我想使用c ++ 11标准。我已将
-std=c++11
传递给编译器。
您不需要做任何其他事情。 GCC自带了C ++标准库(libstdc ++)的实现,它与GCC本身一起开发和测试,因此GCC的版本和libstdc ++的版本是100%兼容的。如果使用-std=c++11
进行编译,那么将启用g++
编译器中的C ++ 11功能以及libstdc ++头文件中的C ++ 11功能。
答案 2 :(得分:6)
如果使用g ++前端,编译器会自动使用libstdc ++,而不是gcc前端。