Niklas Rosencrantz
Niklas Rosencrantz

Reputation: 26671

What does the compilation error "SIG_BLOCK undeclared" mean?

I get an error message error: ‘SIG_BLOCK’ undeclared for this code when compiling with -ansi.

sigprocmask(SIG_BLOCK, &my_sig, NULL);

Did I forget to be explicit about some header file? These are my includes

#include <sys/stat.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <dirent.h>
#include <errno.h>
#include <stdarg.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/time.h>

Upvotes: 2

Views: 3015

Answers (1)

alk
alk

Reputation: 70981

You need to tell the compiler you want SIG_BLOCK to be defined.

From man sigaction:

Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

  sigprocmask(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE 

So you might like to pass the option

-D_POSIX_SOURCE

or

-D_POSIX_C_SOURCE=1

to gcc for example

Alternativly you can put those "requests" as preprocessor directives right at the top of your sources:

#define _POSIX_SOURCE
... /* other includes */
#include <signal.h>

or

#define _POSIX_C_SOURCE 1
 ... /* other includes */
#include <signal.h>

Upvotes: 3

Related Questions