gcc 何时需要使用标志-stdlib=libstdc++?

wvt8vs2t  于 2023-03-02  发布在  其他
关注(0)|答案(3)|浏览(241)

当使用gcc编译时,什么时候需要使用编译器和链接器的标志-stdlib=libstdc++
编译器是否自动使用libstdc++?
我在Ubuntu 13.10上使用gcc4.8.2,我想使用c++11标准。我已经将-std=c++11传递给编译器。

xqkwcwgp

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编译新代码。
  • x1米11米1x
  • clang++ -std=gnu++11 input.cxx -o a.out
xggvc2p6

xggvc2p62#

当使用gcc编译时,什么时候需要使用编译器和链接器的标志-stdlib=libstdc++
简短回答:* * 从来没有**
更长的答案:-stdlib是一个Clang标志,不适用于任何版本的GCC。在macOS上,有时gccg++命令实际上是Clang的别名而不是GCC,而且苹果发布的libstdc 版本太老了(大约在2008年),所以它当然不支持C11。这意味着在macOS上使用Clang-pretaking-to-be-GCC时,您可以使用-stdlib=libc++来选择Clang新的C++11兼容库,或者您可以使用-stdlib=libstdc++来选择属于博物馆的libstdc 的C11以前的古董版本,但是在GNU/Linux上gccg++实际上是GCC而不是Clang,因此-stdlib选项根本不起作用。

    • 编辑:**自从我写了这个答案之后,GCC被修改为 * 有条件地 * 支持-stdlib标志,但是对于大多数平台来说,默认情况下支持是禁用的。即使启用了它,默认值也是-stdlib=libstdc++,所以你仍然不需要明确地说出来。GCC仍然会自动使用libstdc ++。

编译器是否自动使用libstdc
是的,GCC总是使用libstdc ,除非您通过-nostdlib选项告诉它使用no标准库(在这种情况下,您要么需要避免使用任何标准库特性,要么使用-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++编译器中的C11功能,也会启用Clibstdc ++头文件中的11个特性。

nfs0ujit

nfs0ujit3#

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

相关问题