У меня есть этот код C ++ 11, который использует лямбда, это пример.
#include <iostream>
using namespace std;
int main()
{
auto func = [] () { cout << "Hello world"; };
func(); // now call the function
}
Когда я скомпилировал этот код с помощью Clang 3.1 (Apple clang version 3.1 (tags/Apple/clang-318.0.54) (based on LLVM 3.1svn)
) Я получил эту ошибку
lambda.cpp:7:17: error: expected expression
auto func = [] () { cout << "Hello world"; };
Что может быть не так? В этот сайт, Похоже, лямбда поддерживается clang 3.1.
С опцией -std = gnu ++ 11 или c ++ 11 я получил эти сообщения об ошибках.
0. Program arguments: /usr/bin/clang -cc1 -triple x86_64-apple-macosx10.7.4 -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name lambda.cpp -pic-level 1 -mdisable-fp-elim -relaxed-aliasing -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 128.2 -resource-dir /usr/bin/../lib/clang/3.1 -fmodule-cache-path /var/folders/ng/h2hkycqd2q5g2hz42c47bt4w0000gn/T/clang-module-cache -std=gnu++11 -fdeprecated-macro -fdebug-compilation-dir /Users/smcho/Desktop/C++test -ferror-limit 19 -fmessage-length 173 -stack-protector 1 -fblocks -fobjc-runtime-has-arc -fobjc-runtime-has-weak -fobjc-dispatch-method=mixed -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o /var/folders/ng/h2hkycqd2q5g2hz42c47bt4w0000gn/T/lambda-XvZzHg.o -x c++ lambda.cpp
1. lambda.cpp:7:49: current parser token ';'
2. lambda.cpp:6:1: parsing function body 'main'
3. lambda.cpp:6:1: in compound statement ('{}')
clang: error: unable to execute command: Segmentation fault: 11
clang: error: clang frontend command failed due to signal 2 (use -v to see invocation)
clang: note: diagnostic msg: Please submit a bug report to http://developer.apple.com/bugreporter/ and include command line arguments and all diagnostic information.
clang: note: diagnostic msg: Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /var/folders/ng/h2hkycqd2q5g2hz42c47bt4w0000gn/T/lambda-roTwCZ.ii
clang: note: diagnostic msg: /var/folders/ng/h2hkycqd2q5g2hz42c47bt4w0000gn/T/lambda-roTwCZ.sh
Это потому что лязг ++ по умолчанию компилирует ваш код, используя стандарт ISO C ++ 1998 (включая дефекты, указанные в стандарте ISO C ++ 2003), за исключением «экспорта» (который был удален в C ++ 11)
Лямбды являются частью Clang-х Расширение языка C ++ 11, поэтому вам нужно скомпилировать ваш код с -станд = C ++ 11 или же -станд = гну ++ 11
Также см: Clang 3.1 и C ++ 11 поддерживают статус а также Активация поддержки C ++ 11 в Clang
РЕДАКТИРОВАТЬ: Я думаю, что вы пытаетесь скомпилировать свою программу с компилятором C (лязг), а не компилятор C ++ (лязг ++) или ваша установка Clang не ссылается на Libc или же libstdc ++. Попробуйте связать каждую библиотеку, чтобы увидеть, какая из них работает для вас, возможно, что libc может быть не установлен в вашей системе.
Попробуйте скомпилировать вашу программу в режиме C ++ 11, используя лязг ++ исполняемый файл (компилятор C ++) и связать его с Стандартная библиотека Clang C ++ или Стандартная библиотека GNU C ++
1)
# Uses Clang C++ Library and enables C++11 mode
clang++ -stdlib=libc++ -std=c++11 [input]
2)
# Uses GNU Standard C++ Library and enables C++11 mode
clang++ -stdlib=libstdc++ -std=c++11 [input]
Другая возможная проблема может заключаться в том, что вы не скомпилировали Clang с правильными параметрами для включения языковых расширений C ++ 11, попробуйте проверить документацию на наличие правильных флагов, которые будут использоваться при настройке процесса компиляции для Clang.
Xcode обновляется с помощью AppStore, но все равно падает на моем Mac (Lion 10.7.5)
Я мог бы скачать macport, чтобы успешно скомпилировать пример.
sudo port install clang-3.1
clang++-mp-3.1 -std=c++11 lambda.cpp
Отвечая на недавно отредактированный пост:
Я немного исследовал эту проблему, и это ошибка, которая была исправлена в релизных версиях clang 3.1
, В настоящее время я использую:
Debian clang version 3.1-3eudoxos1 (branches/release_31) (based on LLVM 3.1)
Однако, когда я проверил с clang 3.0-6ubuntu3
Я получаю ошибку, похожую на ту, которую вы опубликовали.
Поскольку ваша версия помечена из SVN, я предполагаю, что ваша проблема в том, что она из предварительных версий 3.1, и поддержка лямбды еще не полностью реализована.
Я могу подтвердить, что лямбды работают в clang, потому что я работаю над проектом, который использует их, и мы нацелены как на clang, так и на gcc. Есть несколько ошибок компилятора, которые возникают время от времени; тем не менее, нет ничего проще, чем ваш пример, конечно.
Поэтому я рекомендую обновить вашу версию Clang.
Мне нужно было установить инструменты командной строки, как объясняется в этом посте — Xcode 4.4 идет с подрывной деятельностью?