c++ - C++0x lambda 的 undefined symbol ?

标签 c++ debugging lambda c++11

当我遇到一个绊脚石时,我正在研究 C++0x 中的一些新东西:

#include <list>
#include <cstdio>
using namespace std;

template <typename T,typename F>
void ForEach (list<T> l, F f) {
    for (typename list<T>::iterator it=l.begin();it!=l.end();++it)
        f(*it);
}

int main() {
    int arr[] = {1,2,3,4,5,6};
    list<int> l (arr,arr+6);
    ForEach(l,[](int x){printf("%d\n",x);});
}

不编译。我收到一大堆 undefined symbol 错误。这是 make 的输出:

 i386-apple-darwin9-gcc-4.5.0 -std=c++0x -I/usr/local/include -o func main.cpp
Undefined symbols:
  "___cxa_rethrow", referenced from:
      std::_List_node<int>* std::list<int, std::allocator<int> >::_M_create_node<int const&>(int const&&&) in ccPxxPwU.o
  "operator new(unsigned long)", referenced from:
      __gnu_cxx::new_allocator<std::_List_node<int> >::allocate(unsigned long, void const*) in ccPxxPwU.o
  "___gxx_personality_v0", referenced from:
      ___gxx_personality_v0$non_lazy_ptr in ccPxxPwU.o
  "___cxa_begin_catch", referenced from:
      std::_List_node<int>* std::list<int, std::allocator<int> >::_M_create_node<int const&>(int const&&&) in ccPxxPwU.o
  "operator delete(void*)", referenced from:
      __gnu_cxx::new_allocator<std::_List_node<int> >::deallocate(std::_List_node<int>*, unsigned long) in ccPxxPwU.o
  "___cxa_end_catch", referenced from:
      std::_List_node<int>* std::list<int, std::allocator<int> >::_M_create_node<int const&>(int const&&&) in ccPxxPwU.o
  "std::__throw_bad_alloc()", referenced from:
      __gnu_cxx::new_allocator<std::_List_node<int> >::allocate(unsigned long, void const*) in ccPxxPwU.o
  "std::_List_node_base::_M_hook(std::_List_node_base*)", referenced from:
      void std::list<int, std::allocator<int> >::_M_insert<int const&>(std::_List_iterator<int>, int const&&&) in ccPxxPwU.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [func] Error 1

为什么这不起作用?

最佳答案

那些是链接错误。您缺少 C++ 库吗?如果您使用 i386-apple-darwin9-g++-4.5.0 会怎么样?

附言我无法对此进行测试,因为我的 Mac 上有 gcc 4.2.1 (i686-apple-darwin10-gcc-4.2.1) 并得到:

cc1plus: error: unrecognized command line option "-std=c++0x"

关于c++ - C++0x lambda 的 undefined symbol ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2665112/

相关文章:

c++ - 使用 gcc 编译时覆盖系统头文件

c++ - Windows 监听服务状态已更改

c++ - 通过统一缓冲区对象发送到 GLSL 的数据泄漏到其他绘制调用中 (OpenGL 3.2)

c++ - 用 reintepret_cast 解释对象地址

c# - 获取 <compilation debug ="true"> 的 .NET Framework 设置

Java 8 : Do not understand the way Java implements Functional Interfaces

debugging - elisp `trace-function` 不产生跟踪

android - Android-Logcat错误

python - 如何在 Python lambda 表达式中表达条件执行?

scala - 如何将一个 lambda 表达式对象分配给另一个对象?