Как скомпилировать C++ с поддержкой C++11 в терминале Mac
Я хотел скомпилировать исходный код C++11 в терминале Mac, но не удалось. Я пытался g++ -std=c++11,g++ -std=c++0x,g++ -std=gnu++11 и g++ -std=gnu++0x но ничего не получалось. Терминал всегда читается unrecognized command line option. Однако,g++ -std=gnu и такие вещи работали нормально (конечно, исходный код C++11 не мог пройти).
какой параметр следует использовать для включения поддержки C++11?
кстати, инструмент командной строки, который я использую, установлен в Xcode, и я уверен, что они обновлены.
2 ответов:
как уже упоминалось, вы должны использовать
clang++, а неg++. Кроме того, вы должны использовать библиотеку libc++ вместо libstdc++ по умолчанию; включенная версия libstdc++ довольно старая и поэтому не включает в себя функции библиотеки C++11.clang++ -std=c++11 -stdlib=libc++ -Weverything main.cppесли вы не установили инструменты командной строки для Xcode, вы можете запустить компилятор и другие инструменты, не делая этого с помощью .
xcrun clang++ -std=c++11 -stdlib=libc++ -Weverything main.cppтакже, если есть особое предупреждение вы хотите отключить вы можете передать дополнительные флаги компилятору, чтобы сделать это. В конце предупреждающих сообщений он показывает вам наиболее конкретный флаг, который позволит включить предупреждение. Чтобы отключить это предупреждение, вы добавляете
no-на имя предупреждения.например, вам, вероятно, не нужны предупреждения о совместимости c++98. В конце этих предупреждений он показывает флаг
-Wc++98-compatи чтобы отключить их вы проходите-Wno-c++98-compat.
XCode использует
clangиclang++при компиляции, а неg++(предполагая, что вы не настроены вещей). Вместо этого попробуйте:$ cat t.cpp #include <iostream> int main() { int* p = nullptr; std::cout << p << std::endl; } $ clang++ -std=c++11 -stdlib=libc++ t.cpp $ ./a.out 0x0спасибо ответ bames53 за указание на то, что я пропустил
-stdlib=libc++.если вы хотите использовать некоторые расширения GNU (а также использовать C++11), вы можете использовать
-std=gnu++11вместо-std=c++11, который включит режим C++11, а также сохранит включенными расширения GNU.
Comments