铛的支持C ++ 11的lambda(clang's support of C++ 11 l

2019-08-02 15:18发布

我有一个使用此拉姆达C ++ 11代码,这是一个例子。

#include <iostream>

using namespace std;

int main()
{
    auto func = [] () { cout << "Hello world"; };
    func(); // now call the function
}

当我编译此代码铛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"; };

可能是什么问题? 在这个网站 ,拉姆达似乎铿锵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

Answer 1:

这是因为铛++ 除了“出口”(已在C ++ 11被移除)在默认情况下使用编译ISO C ++ 1998标准(包括在ISO C ++ 2003标准解决的缺陷)你的代码

Lambda表达式是部分锵的 C ++语言11扩展 ,因此,你需要用-std = C ++ 11-std = GNU ++ 11编译代码

也参见: 锵3.1和C ++ 11个支持状态和激活C ++中锵11支持

编辑:我认为你正试图与C编译器( ),而不是C ++编译器( 铛++)或您锵安装编译程序不会链接到libc的libstdc ++。 试着对每个库链接,看看哪一个对你的作品,它是可能的libc的可能不是你的系统上安装。

尝试使用铛++可执行文件(C ++编译器)用C ++ 11模式下编译你的程序,要么用链接它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]

另一个可能的问题可能是你没有编译锵用正确的选项来启用C ++ 11个语言扩展,尝试和查看文档,因为当你配置锵编译过程中正确使用的标志。



Answer 2:

Xcode的使用AppStore的更新,但它仍然崩溃在我的Mac(狮子10.7.5)

我可以下载macport编译成功的例​​子。

sudo port install clang-3.1
clang++-mp-3.1 -std=c++11 lambda.cpp 


Answer 3:

应对新编辑的帖子:

我调查了这个问题一点,那就是在更新版本中修正错误clang 3.1 。 我目前使用:

Debian clang version 3.1-3eudoxos1 (branches/release_31) (based on LLVM 3.1)

然而,当我与测试clang 3.0-6ubuntu3我得到一个类似的错误给你贴一个。

因为你的版本是从SVN标志着我认为您的问题是,它从3.1预发布版本是和lambda的支持尚未完全没有实现。

我可以证实,lambda表达式做铛工作,因为我正在使用他们的项目,我们的目标都铛和gcc。 有迹象表明,从时间此起彼伏的几个编译器boogs; 然而,没有那么简单,你给出的例子,当然。

所以,我的建议是更新铛的版本。



Answer 4:

我需要安装的命令行工具,这是文章解释- 是否Xcode的4.4配备了颠覆?



文章来源: clang's support of C++ 11 lambda