Когда необходимо использовать флаг -stdlib = libstdС++?
Когда необходимо использовать флаг -stdlib=libstdc++
для компилятора и компоновщика при компиляции с помощью gcc?
Компилятор автоматически использует libstdС++?
Я использую gcc4.8.2 на Ubuntu 13.10, и я бы хотел использовать стандарт С++ 11. Я уже передал -std=c++11
компилятору.
Ответы
Ответ 1
В Linux: В общем, все общедоступные дистрибутивы Linux будут использовать libstdc++ по умолчанию, и все современные версии GCC поставляются с libstdc++, который поддерживает С++ 11. Если вы хотите скомпилировать код на C++ 11 здесь, используйте один из следующих способов:
g++ -std=c++11 input.cxx -o a.out
(обычно компилятор GNU)
g++ -std=gnu++11 input.cxx -o a.out
В OS X до Mavericks: g++
фактически был псевдонимом для clang++
, а старая версия Apple libstdc++ была по умолчанию. Вы можете использовать libc++ (который включал поддержку библиотеки c ++ 11), передав -stdlib=libc++
. Если вы хотите скомпилировать код на C++ 11 здесь, используйте один из следующих способов:
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
На OS X начиная с Mavericks: libc++ по умолчанию. Вы можете использовать старую версию Apple libstdc++ (которая не включает поддержку библиотеки c ++ 11), передав -stdlib=libstdc++
clang++ -std=c++11 input.cxx -o a.out
clang++ -std=gnu++11 input.cxx -o a.out
Ответ 2
Когда необходимо использовать флаг -stdlib=libstdc++
для компилятора и компоновщика при компиляции с помощью gcc?
Краткий ответ: никогда
Более длинный ответ: -stdlib
является флагом Clang и не будет работать с любой версией GCC, когда-либо выпущенной. В Mac OS X иногда команды gcc
и g++
на самом деле являются псевдонимами для Clang , а не GCC, а версия libstdc++, которую поставляет Apple, древняя (около 2008 г.) поэтому, конечно, он не поддерживает C++ 11. Это означает, что в OS X при использовании Clang-pretending-to-be-GCC вы можете использовать -stdlib=libc++
, чтобы выбрать Clang новую C++ 11-совместимую библиотеку, или вы можете использовать -stdlib=libstdc++
, чтобы выбрать пред- C++ 11 старинная версия libstdc++, принадлежащая музею. Но в GNU/Linux gcc
и g++
действительно являются GCC, а не Clang, и поэтому опция -stdlib
вообще не будет работать.
Компилятор автоматически использует libstdc++?
Да, GCC всегда использует libstdc++, если вы не скажете ему использовать нет стандартной библиотеки вообще с опцией -nostdlib
(в этом случае вам нужно либо избегать использования каких-либо стандартных функций библиотеки, либо использовать [TG410) ] и флаги -L
и -l
указывают на альтернативный набор файлов заголовков и библиотек).
Я использую gcc4.8.2 в Ubuntu 13.10, и я хотел бы использовать стандарт C++ 11. Я уже передал -std=c++11
компилятору.
Вам не нужно больше ничего делать. GCC поставляется с собственной реализацией стандартной библиотеки C++ (libstdc++), которая разрабатывается и тестируется вместе с самой GCC, поэтому версия GCC и версия libstdc++ совместимы на 100%. Если вы компилируете с -std=c++11
, то это включает функции C++ 11 в компиляторе g++
, а также функции C++ 11 в заголовках libstdc++.
Ответ 3
Компилятор автоматически использует libstdС++, если вы используете внешний интерфейс g++, а не интерфейс gcc.