【问题标题】:Xcode 4.2 and lambda expressions (OSX Lion)Xcode 4.2 和 lambda 表达式 (OSX Lion)
【发布时间】:2011-11-10 15:57:42
【问题描述】:

我正在尝试在我的 Mac 上编译 C++11 功能。到目前为止,我已经尝试了两种不同的方法。首先,最新的 Xcode (4.2) 声称支持“C++11 功能”,但是当我尝试编译时:

#include <iostream>

int main()
{
    using namespace std;
    int n = [] (int x, int y) { return x + y; }(5, 4);
    cout << n << endl;
}

第一个括号 ([) 出现“预期表达式”错误。我猜 lambda 表达式不包含在新的 C++11 功能中?

然后,作为解决方法,我从http://hpc.sourceforge.net/ 下载了 gcc 4.6 二进制文件,但是当我使用 gcc-4.6 (/usr/local/bin/gcc-4.6 -std=c++0x test.cpp) 时,我得到:

Undefined symbols for architecture x86_64:
  "std::cout", referenced from:
      _main in cctnMUFF.o
...

我认为找不到标准库是个问题?

谢谢!

【问题讨论】:

    标签: c++ lambda c++11 xcode4.2


    【解决方案1】:

    XCode 4.2 附带了一个后期的 Clang 2.9,由 Apple 修补。它不支持 lambda 和统一初始化程序。 Clang 3.0 也没有,因此您必须至少等到 Clang 3.1(从现在起 6 个月后到期)。

    或者,您可以使用 Macports 的 GCC 4.6 来支持 lambda。


    更新到您的更新:您需要链接g++,或手动添加-lstdc++

    【讨论】:

    • 啊哈!有效!只需要使用 g++ 代替。至少我现在可以手动编译。谢谢!
    【解决方案2】:

    在 gcc 4.5 中添加了对 lambda 的支持。 Xcode 使用 gcc 4.2,它不太可能升级到更新版本(很可能是由于更新版本的 gcc 获得了 GPL3 许可)。如果您设法将 Xcode 配置为使用 gcc 4.5 或 4.6,请告诉我们... 因此,Apple 正在转向 Clang。让我们希望 Clang 能够很快支持(大部分)C++11 功能......

    【讨论】:

    • piokuc:Clang 已经支持大量 C++11 特性,只是不支持 lambda(非常不幸)。查看当前状态:clang.llvm.org/cxx_status.html
    • 貌似最近在 svn 版本的 Clang 中添加了 lambda 支持。所以希望 Xcode 的下一个(4.3 后)版本也将支持 C++ lambda。
    猜你喜欢
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 2011-12-24
    • 2011-11-30
    • 1970-01-01
    • 2011-12-14
    • 2011-10-13
    • 1970-01-01
    相关资源
    最近更新 更多