Когда нужно использовать флаг -stdlib=libstdc++в?

Когда необходимо использовать флаг -stdlib=libstdc++ в для компилятора и линкера при компиляции с помощью GCC?

Делает компилятор автоматически использовать с libstdc++?

Я использую версии gcc4.8.2 на Ubuntu 13.10 и я хотел бы использовать стандарт C++11. Я уже пропуск-с std=с++11` для компилятора.

Комментарии к вопросу (1)
Решение

На Linux: В общем, все обычно доступны дистрибутивы Linux будут использовать libstdc++ по умолчанию, и все современные версии GCC располагают с libstdc++, который поддерживает C++11. Если вы хотите компилировать код C++11 здесь, используйте одно из следующих значений:

  • г++ -с std=с++11 ввода.схх-о себе.из` (обычно компиляторов GNU)
  • г++ -с std=с GNU++11 ввода.схх-о себе.из`

На ОС Х Маверикс до: г++ был фактически псевдоним для лязг++ и Яблоко'ы старая версия libstdc++ был по умолчанию. Вы могли бы использовать библиотеку libc++ (который включал поддержкой C++11 библиотека), передавая-stdlib=библиотеки libc++`. Если вы хотите компилировать код C++11 здесь, используйте одно из следующих значений:

  • г++ -с std=с++11 -stdlib=библиотеки libc++ ввод.схх-о себе.из` (лязг, не GNU компилятор!)
  • г++ -с std=с GNU++11 -stdlib=библиотеки libc++ ввод.схх-о себе.из` (лязг, не GNU компилятор!)
  • с Clang++ -с std=с++11 -stdlib=библиотеки libc++ ввод.схх-о себе.из
  • лязг++ -с std=с GNU++11 -stdlib=библиотеки libc++ ввод.схх-о себе.из

На ОС Х с Маверикс: библиотеки libc++ по умолчанию. Вы можете использовать Apple'ы старая версия libstdc++ (который не входит поддержка C++11 библиотека) с передачей -stdlib=libstdc++в

  • с Clang++ -с std=с++11 ввода.схх-о себе.из
  • лязг++ -с std=с GNU++11 ввода.схх-о себе.из
Комментарии (8)

когда необходимо использовать флаг -stdlib=libstdc++ в для компилятора и линкера при компиляции с помощью GCC?

Короткий ответ: никогда

Более длинный ответ: -stdlib флаг Clang и не будет работать с любой версией GCC когда-либо выпущенных. На Mac ОС Х иногда ССЗ и G++ команды на самом деле являются псевдонимами лязг не НКУ, и версия libstdc++, что Apple кораблей древние (около 2008) поэтому, конечно, это не'т поддержка C++11. Это означает, что на OS X при использовании лязг-делая вид, чтобы быть GCC, вы можете использовать -stdlib=библиотеки libc++, чтобы выбрать лязгом's новый с++11-совместимый библиотеки, или вы можете использовать -stdlib=libstdc++ в к Выберите до C++11 античная версия libstdc++, которая принадлежит музею. Но на GNU/Linux сССЗиG++действительно не лязг ССЗ, и поэтому параметр-stdlib` выиграл'т работать на всех.

делает компилятор автоматически использовать с libstdc++?

Да, GCC всегда использует с libstdc++, если вы не скажете его, чтобы использовать нет стандартная библиотека с -nostdlib параметр (в этом случае вам необходимо либо избегать, используя любой из стандартных библиотечных элементов, или использовать опцию -I и -L и флаги, чтобы указать альтернативный набор заголовочных файлов и библиотек).

Я через версии gcc4.8.2 на Ubuntu 13.10 и я хотел бы использовать стандарт C++11. Я уже пропуск-с std=с++11` для компилятора.

Вы Don'т нужно ничего делать. НКУ поставляется со своей собственной реализацией стандартной библиотеки C++ (libstdc++ в), который разработан и протестирован вместе с самим ССЗ, так что версия GCC и версия libstdc++ на 100% совместимы. Если вы компилируете с-с std=с++11 то, что позволяет в C++11 функции в компилятор G++` а также в C++11 особенности в заголовках с libstdc++.

Комментарии (0)

Компилятор использует с libstdc++ автоматически, если вы используете г++ интерфейс, а не интерфейс ССЗ.

Комментарии (5)