There are a lot of global variable definitions that aren't valid on modern compilers. According to upstream's Dockerfile,
this project is meant to compile with GCC 6! So there are some declarations that need to be changed. 

diff --git a/gui/Linux.h b/gui/Linux.h
index 2a939050..99404d93 100644
--- a/gui/Linux.h
+++ b/gui/Linux.h
@@ -44,8 +44,8 @@
 
 extern gboolean UseGui;
 extern int StatesC;
-char cfgfile[MAXPATHLEN];	/* ADB Comment this out - make a local var, or at least use gchar funcs */
-char cfgfile_basename[MAXPATHLEN];	/* ADB Comment this out - make a local var, or at least use gchar funcs */
+extern char cfgfile[MAXPATHLEN];	/* ADB Comment this out - make a local var, or at least use gchar funcs */
+extern char cfgfile_basename[MAXPATHLEN];	/* ADB Comment this out - make a local var, or at least use gchar funcs */
 
 int LoadConfig();
 void SaveConfig();
diff --git a/gui/LnxMain.c b/gui/LnxMain.c
index d6dd9316..02002bc1 100644
--- a/gui/LnxMain.c
+++ b/gui/LnxMain.c
@@ -49,6 +49,9 @@ enum {
 
 gboolean UseGui = TRUE;
 
+char cfgfile[MAXPATHLEN] = {0};
+char cfgfile_basename[MAXPATHLEN] = {0};
+
 static void CreateMemcard(char *filename, char *conf_mcd) {
 	gchar *mcd;
 	struct stat buf;
diff --git a/plugins/bladesio1/sio1.c b/plugins/bladesio1/sio1.c
index 17ac4b65..c6fd585a 100644
--- a/plugins/bladesio1/sio1.c
+++ b/plugins/bladesio1/sio1.c
@@ -55,8 +55,6 @@ static const unsigned char build	= 1;
 
 static void (CALLBACK *irqCallback)(void) = 0;
 
-Settings settings;
-
 /* sio status flags.
  */
 enum {
diff --git a/plugins/dfinput/pad.h b/plugins/dfinput/pad.h
index 8337fe7e..6d44851d 100644
--- a/plugins/dfinput/pad.h
+++ b/plugins/dfinput/pad.h
@@ -151,7 +151,7 @@ typedef struct tagKeyDef {
 enum { ANALOG_XP = 0, ANALOG_XM, ANALOG_YP, ANALOG_YM };
 
 #if SDL_VERSION_ATLEAST(2,0,0)
-SDL_GameControllerButton controllerMap[DKEY_TOTAL];	
+extern SDL_GameControllerButton controllerMap[DKEY_TOTAL];
 #endif
 
 typedef struct tagPadDef {
diff --git a/plugins/dfnet/cfg.c b/plugins/dfnet/cfg.c
index 921efbe3..1057426a 100644
--- a/plugins/dfnet/cfg.c
+++ b/plugins/dfnet/cfg.c
@@ -11,6 +11,8 @@
 
 #include "dfnet.h"
 
+Config conf;
+
 #define CFG_FILENAME "dfnet.cfg"
 
 void SaveConf() {
diff --git a/plugins/dfnet/dfnet.c b/plugins/dfnet/dfnet.c
index 6c6ec5f9..ddc92169 100644
--- a/plugins/dfnet/dfnet.c
+++ b/plugins/dfnet/dfnet.c
@@ -24,6 +24,9 @@ const unsigned char build    = 3;    // increase that with each version
 
 static char *libraryName      = N_("Socket Driver");
 
+fd_set rset;
+fd_set wset;
+
 unsigned long CALLBACK PSEgetLibType(void) {
 	return PSE_LT_NET;
 }
diff --git a/plugins/dfnet/dfnet.h b/plugins/dfnet/dfnet.h
index 937814f5..e2699ad3 100644
--- a/plugins/dfnet/dfnet.h
+++ b/plugins/dfnet/dfnet.h
@@ -56,7 +56,7 @@ __private_extern char* PLUGLOC(char* toloc);
 
 typedef void* HWND;
 
-struct timeval tm;
+extern struct timeval tm;
 
 #define CALLBACK
 
@@ -70,24 +70,24 @@ typedef struct {
 	char ipAddress[32];
 } Config;
 
-Config conf;
+extern Config conf;
 
 void LoadConf(void);
 void SaveConf(void);
 
-int sock;
-char *PadSendData;
-char *PadRecvData;
-char PadSendSize;
-char PadRecvSize;
-char PadSize[2];
-int PadCount;
-int PadCountMax;
-int PadInit;
-int Ping;
-volatile int WaitCancel;
-fd_set rset;
-fd_set wset;
+extern int sock;
+extern char *PadSendData;
+extern char *PadRecvData;
+extern char PadSendSize;
+extern char PadRecvSize;
+extern char PadSize[2];
+extern int PadCount;
+extern int PadCountMax;
+extern int PadInit;
+extern int Ping;
+extern volatile int WaitCancel;
+extern fd_set rset;
+extern fd_set wset;
 
 long sockInit(void);
 long sockShutdown(void);
