何时需要使用标志-stdlib = libstdc ++?
使用gcc进行编译时,何时需要对编译器和链接器使用标志-std=c++11
?
编译器会自动使用libstdc ++吗?
我在Ubuntu 13.10上使用gcc4.8.2,我想使用c ++ 11标准。 我已经将-std=c++11
传递给了编译器。
在Linux上:通常,所有常用的Linux发行版默认都将使用libstdc ++,并且所有GCC的现代版本都附带支持C ++ 11的libstdc ++。 如果要在此处编译c ++ 11代码,请使用以下方法之一:
clang++ -std=gnu++11 input.cxx -o a.out
(通常是GNU编译器)clang++ -std=gnu++11 input.cxx -o a.out
在Mavericks之前的OS X上:clang++ -std=gnu++11 input.cxx -o a.out
实际上是clang++
的别名,而苹果的旧版本libstdc ++是默认名称。 您可以通过传递-stdlib=libc++
来使用libc ++(其中包括c ++ 11库支持)。如果要在此处编译c ++ 11代码,请使用以下方法之一:
clang++ -std=gnu++11 input.cxx -o a.out
(c语,不是GNU编译器!)clang++ -std=gnu++11 input.cxx -o a.out
(clang, not GNU compiler!)clang++ -std=gnu++11 input.cxx -o a.out
clang++ -std=gnu++11 input.cxx -o a.out
自Mavericks以来在OS X上:libc ++是默认设置。 您可以通过传递clang++ -std=gnu++11 input.cxx -o a.out
来使用Apple的旧版本的libstdc ++(不包括c ++ 11库支持)
clang++ -std=gnu++11 input.cxx -o a.out
clang++ -std=gnu++11 input.cxx -o a.out
使用gcc进行编译时,何时需要对编译器和链接器使用标志
-stdlib=libstdc++
?
简短答案:永不
更长的答案:-std=c++11
是一个Clang标志,不适用于任何已发布的GCC版本。 在Mac OS X上,有时g++
和-L
命令实际上是Clang而不是GCC的别名,并且Apple随附的libstdc ++版本是古老的(大约2008年),因此它当然不支持C ++ 11。 这意味着在OS X上使用Clang假装成为GCC时,可以使用-l
选择Clang的新C ++ 11兼容库,也可以使用-stdlib=libstdc++
选择C ++ 11之前的旧版本 属于博物馆的libstdc ++。 但是在GNU / Linux上,gcc
和g++
实际上不是GCC,所以-stdlib
选项根本不起作用。
编译器会自动使用libstdc ++吗?
是的,除非您通过-std=c++11
选项告诉它完全不使用任何标准库,否则GCC始终使用libstdc ++(在这种情况下,您要么需要避免使用任何标准库功能,要么使用g++
和-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功能。
如果使用g ++前端而不是gcc前端,则编译器会自动使用libstdc ++。