sigemptyset
在 Newlib 下的 Cygwin 上使用时,我们发现编译器错误。该错误发生在 C++ 编译器中,但仅在-std=XXX
使用时发生。如果没有标准选项,测试程序将按预期编译和执行。
测试程序如下,感兴趣的 Cygwin 标头如下。我在 Cygwin 标题中没有看到任何可疑之处。
我尝试过像#define _GNU_SOURCE
and之类的技巧#define _XOPEN_SOURCE 700
。我还尝试过使用全局和std
命名空间等技巧。相关,请参阅-D_XOPEN_SOURCE 做什么/意味着什么?和c++11 中的命名空间问题?.
是什么导致编译失败,我该如何解决?
$ cat ~/test.cxx
#include <signal.h>
int main(int argc, char* argv[])
{
struct sigaction new_handler;
return sigemptyset(&new_handler.sa_mask);
}
没有 a -std=XXX
,它会导致:
$ g++ -c test.cxx
$
使用-std=XXX
,它会导致:
$ g++ -std=c++03 -c test.cxx
test.cxx: In function int main(int, char**):
test.cxx:6:44: error: sigemptyset was not declared in this scope
return sigemptyset(&new_handler.sa_mask);
当尝试sigemptyset
在全局命名空间中使用时:
$ g++ -std=c++03 -c test.cxx
test.cxx: In function ‘int main(int, char**)’:
test.cxx:6:12: error: ‘::sigemptyset’ has not been declared
return ::sigemptyset(&new_handler.sa_mask);
^
使用-std=gnu++03
和朋友时情况变得更糟。