Подтвердить что ты не робот

Когда необходимо использовать флаг -stdlib = libstdС++?

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

Компилятор автоматически использует libstdС++?

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

4b9b3361

Ответ 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.