当使用gcc编译时,什么时候需要使用编译器和链接器的标志-stdlib=libstdc++?编译器是否自动使用libstdc++?我在Ubuntu 13.10上使用gcc4.8.2,我想使用c++11标准。我已经将-std=c++11传递给编译器。
-stdlib=libstdc++
-std=c++11
xqkwcwgp1#
在Linux上:一般来说,所有常见的linux发行版默认都使用libstdc++,并且所有GCC的现代版本都附带了一个支持C11的libstdc。如果你想编译C++11代码,请使用以下之一:
g++ -std=c++11 input.cxx -o a.out
g++ -std=gnu++11 input.cxx -o a.out
g++
clang++
-stdlib=libc++
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
-stdlib=<...>
libstdc++.6.dylib
clang++ -std=gnu++11 input.cxx -o a.out
xggvc2p62#
当使用gcc编译时,什么时候需要使用编译器和链接器的标志-stdlib=libstdc++?简短回答:* * 从来没有**更长的答案:-stdlib是一个Clang标志,不适用于任何版本的GCC。在macOS上,有时gcc和g++命令实际上是Clang的别名而不是GCC,而且苹果发布的libstdc 版本太老了(大约在2008年),所以它当然不支持C11。这意味着在macOS上使用Clang-pretaking-to-be-GCC时,您可以使用-stdlib=libc++来选择Clang新的C++11兼容库,或者您可以使用-stdlib=libstdc++来选择属于博物馆的libstdc 的C11以前的古董版本,但是在GNU/Linux上gcc和g++实际上是GCC而不是Clang,因此-stdlib选项根本不起作用。
-stdlib
gcc
编译器是否自动使用libstdc ?是的,GCC总是使用libstdc ,除非您通过-nostdlib选项告诉它使用no标准库(在这种情况下,您要么需要避免使用任何标准库特性,要么使用-I、-L和-l标志将其指向另一组头文件和库文件)。我在Ubuntu 13.10上使用gcc4.8.2,我想使用c11标准。我已经将-std=c++11传递给编译器。你不需要做任何其他的事情,GCC自带C标准库的实现(libstdc ),它是与GCC本身一起开发和测试的,因此GCC版本和libstdc 版本100%兼容。如果您使用-std=c++11编译,则会启用g++编译器中的C11功能,也会启用Clibstdc ++头文件中的11个特性。
-nostdlib
-I
-L
-l
nfs0ujit3#
如果使用g前端而不是gcc前端,编译器会自动使用libstdc。
3条答案
按热度按时间xqkwcwgp1#
在Linux上:一般来说,所有常见的linux发行版默认都使用libstdc++,并且所有GCC的现代版本都附带了一个支持C11的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(它包含c11库支持)。如果您想在这里编译c11代码,请使用以下命令之一:g++ -std=c++11 -stdlib=libc++ input.cxx -o a.out
(叮当声,不是GNU编译器!)g++ -std=gnu++11 -stdlib=libc++ input.cxx -o a.out
(叮当声,不是GNU编译器!)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=<...>
标志。从Xcode 10开始,完全不再支持基于libstdc构建。基于libstdc构建的现有代码将继续工作,因为仍然提供libstdc++.6.dylib
,但不支持基于libstdc编译新代码。clang++ -std=gnu++11 input.cxx -o a.out
xggvc2p62#
当使用gcc编译时,什么时候需要使用编译器和链接器的标志
-stdlib=libstdc++
?简短回答:* * 从来没有**
更长的答案:
-stdlib
是一个Clang标志,不适用于任何版本的GCC。在macOS上,有时gcc
和g++
命令实际上是Clang的别名而不是GCC,而且苹果发布的libstdc 版本太老了(大约在2008年),所以它当然不支持C11。这意味着在macOS上使用Clang-pretaking-to-be-GCC时,您可以使用-stdlib=libc++
来选择Clang新的C++11兼容库,或者您可以使用-stdlib=libstdc++
来选择属于博物馆的libstdc 的C11以前的古董版本,但是在GNU/Linux上gcc
和g++
实际上是GCC而不是Clang,因此-stdlib
选项根本不起作用。-stdlib
标志,但是对于大多数平台来说,默认情况下支持是禁用的。即使启用了它,默认值也是-stdlib=libstdc++
,所以你仍然不需要明确地说出来。GCC仍然会自动使用libstdc ++。编译器是否自动使用libstdc ?
是的,GCC总是使用libstdc ,除非您通过
-nostdlib
选项告诉它使用no标准库(在这种情况下,您要么需要避免使用任何标准库特性,要么使用-I
、-L
和-l
标志将其指向另一组头文件和库文件)。我在Ubuntu 13.10上使用gcc4.8.2,我想使用c11标准。我已经将
-std=c++11
传递给编译器。你不需要做任何其他的事情,GCC自带C标准库的实现(libstdc ),它是与GCC本身一起开发和测试的,因此GCC版本和libstdc 版本100%兼容。如果您使用
-std=c++11
编译,则会启用g++
编译器中的C11功能,也会启用Clibstdc ++头文件中的11个特性。nfs0ujit3#
如果使用g前端而不是gcc前端,编译器会自动使用libstdc。