Compilation Error of C code on Linux (Same code compiles on OSX)

c, gcc, linker, linux, ubuntu

Solution

You are probably missing some `#include`s which are brought in implicitly on OS X, but not on Linux.

Judging from the error messages, you are probably missing includes for at least:

- `<signal.h>` (for `sigset_t` and others)

- `<fcntl.h>` (for `O_*`)

- `<unistd.h>` (for a bunch of stuff)

- `<netdb.h>` (for various network functions and constants)

- `<stdio.h>` (for `getline`)

You may also need to define some feature macros (e.g, `_POSIX_C_SOURCE`) to get certain system-dependent functions, including `strerror_r` and `pselect`.

Problem

I am trying to compile some code on linux that I KNOW compiles on OSX, but I am getting some issues. All of the files have headers named .h, and all of the files are in the same directory. I am compiling like this: ``` gcc *.c -std=c99 -lpthread ``` And while this code does compile on OSX, I get a bunch of weird linker errors on my Ubuntu install. Am I missing a few compiler options? It is a default Ubuntu-server install with the additional packages `gcc` and `build-essential` installed. ``` In file included from errorLogger.h:24:0, from configParser.h:17, from configParser.c:9: signalHandling.h:24:18: error: unknown type name ‘sigset_t’ configParser.c: In function ‘parseConfigFile’: configParser.c:114:5: warning: implicit declaration of function ‘getline’ [-Wimplicit-function-declaration] In file included from errorLogger.h:24:0, from global.h:18, from connection.h:19, from connection.c:10: signalHandling.h:24:18: error: unknown type name ‘sigset_t’ connection.c: In function ‘createConnectionQueue’: connection.c:189:28: warning: assignment makes integer from pointer without a cast [enabled by default] In file included from errorLogger.h:24:0, from database.h:16, from database.c:9: signalHandling.h:24:18: error: unknown type name ‘sigset_t’ In file included from errorLogger.h:24:0, from errorLogger.c:10: signalHandling.h:24:18: error: unknown type name ‘sigset_t’ errorLogger.c: In function ‘reportError’: errorLogger.c:63:5: warning: implicit declaration of function ‘strerror_r’ [-Wimplicit-function-declaration] errorLogger.c: In function ‘logMessage’: errorLogger.c:87:5: warning: implicit declaration of function ‘localtime_r’ [-Wimplicit-function-declaration] errorLogger.c: In function ‘processErrorQueue’: errorLogger.c:131:17: warning: implicit declaration of function ‘open’ [-Wimplicit-function-declaration] errorLogger.c:131:57: error: ‘O_APPEND’ undeclared (first use in this function) errorLogger.c:131:57: note: each undeclared identifier is reported only once for each function it appears in errorLogger.c:131:68: error: ‘O_CREAT’ undeclared (first use in this function) errorLogger.c:131:78: error: ‘O_WRONLY’ undeclared (first use in this function) errorLogger.c:131:88: error: ‘S_IWRITE’ undeclared (first use in this function) errorLogger.c:131:99: error: ‘S_IREAD’ undeclared (first use in this function) errorLogger.c:146:13: warning: implicit declaration of function ‘fsync’ [-Wimplicit-function-declaration] errorLogger.c: In function ‘startErrorLogger’: errorLogger.c:167:36: error: ‘O_APPEND’ undeclared (first use in this function) errorLogger.c:167:47: error: ‘O_CREAT’ undeclared (first use in this function) errorLogger.c:167:57: error: ‘O_WRONLY’ undeclared (first use in this function) errorLogger.c:167:67: error: ‘S_IWRITE’ undeclared (first use in this function) errorLogger.c:167:78: error: ‘S_IREAD’ undeclared (first use in this function) errorLogger.c:214:57: error: ‘O_EXCL’ undeclared (first use in this function) errorLogger.c:231:27: warning: assignment makes integer from pointer without a cast [enabled by default] errorLogger.c: In function ‘closeErrorLogger’: errorLogger.c:246:9: warning: implicit declaration of function ‘pthread_kill’ [-Wimplicit-function-declaration] In file included from errorLogger.h:24:0, from global.h:18, from global.c:9: signalHandling.h:24:18: error: unknown type name ‘sigset_t’ In file included from main.c:23:0: signalHandling.h:24:18: error: unknown type name ‘sigset_t’ main.c: In function ‘main’: main.c:53:5: warning: implicit declaration of function ‘blockSignals’ [-Wimplicit-function-declaration] main.c:61:45: error: invalid application of ‘sizeof’ to incomplete type ‘struct addrinfo’ main.c:62:29: error: invalid application of ‘sizeof’ to incomplete type ‘struct addrinfo’ main.c:64:10: error: dereferencing pointer to incomplete type main.c:65:10: error: dereferencing pointer to incomplete type main.c:66:10: error: dereferencing pointer to incomplete type main.c:66:23: error: ‘AI_PASSIVE’ undeclared (first use in this function) main.c:66:23: note: each undeclared identifier is reported only once for each function it appears in main.c:69:5: warning: implicit declaration of function ‘getaddrinfo’ [-Wimplicit-function-declaration] main.c:73:9: warning: implicit declaration of function ‘gai_strerror’ [-Wimplicit-function-declaration] main.c:73:9: warning: format ‘%s’ expects argument of type ‘char *’, but argument 4 has type ‘int’ [-Wformat] main.c:73:9: warning: format ‘%s’ expects argument of type ‘char *’, but argument 4 has type ‘int’ [-Wformat] main.c:81:41: error: dereferencing pointer to incomplete type main.c:83:30: error: dereferencing pointer to incomplete type main.c:83:46: error: dereferencing pointer to incomplete type main.c:83:64: error: dereferencing pointer to incomplete type main.c:96:30: error: dereferencing pointer to incomplete type main.c:96:44: error: dereferencing pointer to incomplete type main.c:112:5: warning: implicit declaration of function ‘freeaddrinfo’ [-Wimplicit-function-declaration] main.c:138:9: error: unknown type name ‘fd_set’ main.c:142:9: warning: implicit declaration of function ‘FD_ZERO’ [-Wimplicit-function-declaration] main.c:143:9: warning: implicit declaration of function ‘FD_SET’ [-Wimplicit-function-declaration] main.c:145:9: warning: implicit declaration of function ‘pselect’ [-Wimplicit-function-declaration] In file included from signalHandling.c:10:0: signalHandling.h:24:18: error: unknown type name ‘sigset_t’ signalHandling.c:12:18: error: unknown type name ‘sigset_t’ signalHandling.c: In function ‘setHandler’: signalHandling.c:51:53: error: invalid application of ‘sizeof’ to incomplete type ‘struct sigaction’ signalHandling.c:52:36: error: invalid application of ‘sizeof’ to incomplete type ‘struct sigaction’ signalHandling.c:54:5: warning: implicit declaration of function ‘sigemptyset’ [-Wimplicit-function-declaration] signalHandling.c:54:30: error: dereferencing pointer to incomplete type signalHandling.c:60:9: warning: implicit declaration of function ‘sigaddset’ [-Wimplicit-function-declaration] signalHandling.c:60:35: error: dereferencing pointer to incomplete type signalHandling.c:67:17: error: dereferencing pointer to incomplete type signalHandling.c:72:9: warning: implicit declaration of function ‘sigaction’ [-Wimplicit-function-declaration] ```

Original source

Related problems