Когда необходимо использовать флаг -stdlib=libstdc++
для компилятора и компоновщика при компиляции с помощью gcc?
Краткий ответ: никогда
Более длинный ответ: -stdlib
— это флаг Clang, который не будет работать ни с одной версией GCC, когда-либо выпущенной. В Mac OS X иногда команды gcc
и g++
на самом деле являются псевдонимами для Clang не GCC, а версия libstdc++, которую поставляет Apple, древняя (около 2008 г.), так что, конечно, это не поддерживает С++11. Это означает, что в OS X при использовании Clang, претендующего на статус GCC, вы можете использовать -stdlib=libc++
для выбора новой библиотеки Clang, совместимой с C++ 11, или вы можете использовать -stdlib=libstdc++
для выбора устаревшей версии до C++ 11. libstdc++, который принадлежит музею. Но в GNU/Linux gcc
и g++
действительно являются GCC, а не Clang, поэтому вариант -stdlib
вообще не будет работать.
Компилятор автоматически использует libstdc++?
Да, GCC всегда использует libstdc++, если вы не укажете ему не использовать стандартную библиотеку вообще с параметром -nostdlib
(в этом случае вам нужно либо избегать использования каких-либо функций стандартной библиотеки, либо использовать -I
и -L
и -l
флаги, чтобы указать на альтернативный набор заголовочных и библиотечных файлов).
Я использую gcc4.8.2 в Ubuntu 13.10, и я хотел бы использовать стандарт С++ 11. Я уже передаю -std=c++11
компилятору.
Вам не нужно делать ничего другого. GCC поставляется с собственной реализацией стандартной библиотеки C++ (libstdc++), которая разработана и протестирована вместе с самой GCC, поэтому версия GCC и версия libstdc++ совместимы на 100%. Если вы компилируете с -std=c++11
, то это включает функции С++ 11 в компиляторе g++
, а также функции С++ 11 в заголовках libstdС++.
person
Jonathan Wakely
schedule
18.05.2018
-stdlib=libstdc++
не является допустимым флагом gcc. Его можно использовать в MacOS только потому, чтоg++
в MacOS на самом делеclang++
. - person davmac   schedule 08.01.2018