sigemptyset
Cygwin で Newlibを使用すると、コンパイラ エラーが発生します。このエラーは C++ コンパイラで発生しますが、使用されている場合のみ-std=XXX
です。標準オプションがない場合、テスト プログラムは期待どおりにコンパイルおよび実行されます。
以下にテスト プログラムを示します。関心のある Cygwin ヘッダーが続きます。Cygwin ヘッダーに疑わしいものは何もありません。
#define _GNU_SOURCE
や などのトリックを試しました#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);
}
がないと、次の-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);
^