【发布时间】:2016-05-09 23:24:11
【问题描述】:
以下代码在c++ (Debian 4.7.2-5) 4.7.2 上产生undefined reference 错误:
#include <signal.h>
class Lol {
public:
void foo() {
struct sigaction sa;
sa.sa_flags = 0;
sigemptyset(&sa.sa_mask);
sa.sa_handler = [](int) {
};
sigaction(SIGTERM, &sa, 0);
}
};
int main() {
Lol l;
l.foo();
}
lev@debi7:~$ c++ -std=c++11 -o lol lol.cpp
/tmp/ccWFXAT9.o:在函数 `Lol::foo()::{lambda(int)#1}::operator void (*)(int)() const'中:lol.cpp (.text._ZZN3Lol3fooEvENKUliE_cvPFviEEv[ _ZZN3Lol3fooEvENKUliE_cvPFviEEv]+0 9):未定义对 `Lol::foo()::{lambda(int)#1}::_FUN(int)' 的引用 collect2:错误:ld 返回 1 个退出状态
lev@debi7:~$ c++ --version
c++ (Debian 4.7.2-5) 4.7.2
但是它在g++-4.7.real (Ubuntu/Linaro 4.7.4-3ubuntu3) 4.7.4 上编译/链接非常好。
这是怎么回事?
【问题讨论】:
标签: c++ c++11 gcc lambda linker