0

I am trying to compile software that was meant for windows from source. The software I am specifically trying to compile is an application called Keeperfx for Dungeon Keeper. I enjoy that game so I thought I could compile its source on linux and see if it works. However, I am not having so much luck.

Doing the make command only gives this output:

mkdir -p obj/std
Building file: src/main.cpp
g++ -I"directx/include" -I"sdl/include" -I"libav/include" -c -fmessage-length=0 -Wall -Wno-sign-compare -Wno-unused-parameter -Wno-strict-aliasing -Wno-unknown-pragmas -MMD -MP -MF"obj/std/main.d" -MT"obj/std/main.d" -march=i686 -fno-omit-frame-pointer -O3   -DBFDEBUG_LEVEL=0  -o"obj/std/main.o" "src/main.cpp"
src/main.cpp:1:0: error: CPU you selected does not support x86-64 instruction set
 #pragma region includes
 ^
src/main.cpp:1:0: error: CPU you selected does not support x86-64 instruction set
Makefile:658: recipe for target 'obj/std/main.o' failed
make: *** [obj/std/main.o] Error 1

So I thought I would use mingw. But I keep getting errors.

../src/bflib_crash.c: In function ‘sigstr’:
../src/bflib_crash.c:77:10: error: ‘SIGBREAK’ undeclared (first use in this function)
     case SIGBREAK : return "Ctrl-Break (Win32)";
          ^
../src/bflib_crash.c:77:10: note: each undeclared identifier is reported only once for each function it appears in
../src/bflib_crash.c: In function ‘LbErrorParachuteInstall’:
../src/bflib_crash.c:189:12: error: ‘SIGBREAK’ undeclared (first use in this function)
     signal(SIGBREAK,ctrl_handler);
            ^
In file included from ../src/bflib_dernc.c:26:0:
/usr/include/fcntl.h:202:12: error: conflicting types for ‘creat’
 extern int creat (const char *__file, mode_t __mode) __nonnull ((1));
            ^
In file included from ../src/bflib_dernc.c:25:0:
/usr/share/mingw-w64/include/io.h:314:15: note: previous declaration of ‘creat’ was here
   int __cdecl creat(const char *_Filename,int _PermissionMode) __MINGW_ATTRIB_D
               ^
In file included from ../src/bflib_dernc.c:27:0:
/usr/include/sys/stat.h:283:12: error: conflicting types for ‘chmod’
 extern int chmod (const char *__file, __mode_t __mode)
            ^
In file included from ../src/bflib_dernc.c:25:0:
/usr/share/mingw-w64/include/io.h:311:15: note: previous declaration of ‘chmod’ was here
   int __cdecl chmod(const char *_Filename,int _AccessMode) __MINGW_ATTRIB_DEPRE
               ^
In file included from ../src/bflib_dernc.c:27:0:
/usr/include/sys/stat.h:311:17: error: conflicting types for ‘umask’
 extern __mode_t umask (__mode_t __mask) __THROW;
                 ^
In file included from ../src/bflib_dernc.c:25:0:
/usr/share/mingw-w64/include/io.h:328:15: note: previous declaration of ‘umask’ was here
   int __cdecl umask(int _Mode) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
               ^
In file included from ../src/bflib_dernc.c:27:0:
/usr/include/sys/stat.h:320:12: error: conflicting types for ‘mkdir’
 extern int mkdir (const char *__path, __mode_t __mode)
            ^
In file included from ../src/bflib_dernc.c:25:0:
/usr/share/mingw-w64/include/io.h:267:15: note: previous declaration of ‘mkdir’ was here
   int __cdecl mkdir (const char *) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
               ^
In file included from ../src/bflib_fileio.c:28:0:
/usr/include/fcntl.h:202:12: error: conflicting types for ‘creat’
 extern int creat (const char *__file, mode_t __mode) __nonnull ((1));
            ^
In file included from ../src/bflib_basics.h:23:0,
                 from ../src/bflib_fileio.h:23,
                 from ../src/bflib_fileio.c:22:
/usr/share/mingw-w64/include/io.h:314:15: note: previous declaration of ‘creat’ was here
   int __cdecl creat(const char *_Filename,int _PermissionMode) __MINGW_ATTRIB_D
               ^
In file included from ../src/bflib_fileio.c:29:0:
/usr/include/sys/stat.h:283:12: error: conflicting types for ‘chmod’
 extern int chmod (const char *__file, __mode_t __mode)
            ^
In file included from ../src/bflib_basics.h:23:0,
                 from ../src/bflib_fileio.h:23,
                 from ../src/bflib_fileio.c:22:
/usr/share/mingw-w64/include/io.h:311:15: note: previous declaration of ‘chmod’ was here
   int __cdecl chmod(const char *_Filename,int _AccessMode) __MINGW_ATTRIB_DEPRE
               ^
In file included from ../src/bflib_fileio.c:29:0:
/usr/include/sys/stat.h:311:17: error: conflicting types for ‘umask’
 extern __mode_t umask (__mode_t __mask) __THROW;
                 ^
In file included from ../src/bflib_basics.h:23:0,
                 from ../src/bflib_fileio.h:23,
                 from ../src/bflib_fileio.c:22:
/usr/share/mingw-w64/include/io.h:328:15: note: previous declaration of ‘umask’ was here
   int __cdecl umask(int _Mode) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
               ^
In file included from ../src/bflib_fileio.c:29:0:
/usr/include/sys/stat.h:320:12: error: conflicting types for ‘mkdir’
 extern int mkdir (const char *__path, __mode_t __mode)
            ^
In file included from ../src/bflib_basics.h:23:0,
                 from ../src/bflib_fileio.h:23,
                 from ../src/bflib_fileio.c:22:
/usr/share/mingw-w64/include/io.h:267:15: note: previous declaration of ‘mkdir’ was here
   int __cdecl mkdir (const char *) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
               ^
../src/bflib_fileio.c: In function ‘LbFileOpen’:
../src/bflib_fileio.c:237:43: error: ‘O_BINARY’ undeclared (first use in this function)
         rc = _sopen(fname, O_RDWR|O_CREAT|O_BINARY, SH_DENYNO, S_IREAD|S_IWRITE
                                           ^
../src/bflib_fileio.c:237:43: note: each undeclared identifier is reported only once for each function it appears in
In file included from /usr/include/bits/errno.h:24:0,
                 from /usr/include/errno.h:35,
                 from /usr/share/mingw-w64/include/intrin.h:65,
                 from /usr/include/SDL2/SDL_cpuinfo.h:44,
                 from /usr/include/SDL2/SDL.h:38,
                 from ../src/bflib_keybrd.c:25:
/usr/include/linux/errno.h:1:23: fatal error: asm/errno.h: No such file or directory
compilation terminated.
../src/bflib_math.c: In function ‘LbRandomSeries’:
../src/bflib_math.c:746:11: warning: implicit declaration of function ‘_lrotr’ [-Wimplicit-function-declaration]
   *seed = _lrotr(i, 13);
           ^
../src/bflib_tcpsp.c:26:26: fatal error: SDL2/SDL_net.h: No such file or directory
 #include <SDL2/SDL_net.h>
                          ^
compilation terminated.
In file included from /usr/include/bits/errno.h:24:0,
                 from /usr/include/errno.h:35,
                 from /usr/share/mingw-w64/include/intrin.h:65,
                 from /usr/include/SDL2/SDL_cpuinfo.h:44,
                 from /usr/include/SDL2/SDL.h:38,
                 from ../src/bflib_video.c:27:
/usr/include/linux/errno.h:1:23: fatal error: asm/errno.h: No such file or directory
compilation terminated.
In file included from /usr/include/bits/errno.h:24:0,
                 from /usr/include/errno.h:35,
                 from /usr/share/mingw-w64/include/intrin.h:65,
                 from /usr/include/SDL2/SDL_cpuinfo.h:44,
                 from /usr/include/SDL2/SDL.h:38,
                 from ../src/bflib_vidsurface.c:25:
/usr/include/linux/errno.h:1:23: fatal error: asm/errno.h: No such file or directory
compilation terminated.
../src/config.c: In function ‘recognize_conf_command’:
../src/config.c:275:13: warning: implicit declaration of function ‘strnicmp’ [-Wimplicit-function-declaration]
         if (strnicmp(buf+(*pos), commands[i].name, cmdname_len) == 0)
             ^
../src/config.c: In function ‘get_language_lwrstr’:
../src/config.c:424:3: warning: implicit declaration of function ‘strlwr’ [-Wimplicit-function-declaration]
   strlwr(lang_str);
   ^
../src/front_network.c: In function ‘net_write_config_file’:
../src/front_network.c:503:9: warning: implicit declaration of function ‘strupr’ [-Wimplicit-function-declaration]
         strupr(net_config_info.str_atz);
         ^
../src/lvl_filesdk1.c: In function ‘get_level_number_from_file_name’:
../src/lvl_filesdk1.c:108:7: warning: implicit declaration of function ‘strnicmp’ [-Wimplicit-function-declaration]
   if (strnicmp(fname,"map",3) != 0)
       ^
../src/lvl_script.c: In function ‘get_next_word’:
../src/lvl_script.c:446:9: warning: implicit declaration of function ‘strupr’ [-Wimplicit-function-declaration]
         strupr(param);
         ^
../src/lvl_script.c: In function ‘get_map_location_code_name’:
../src/lvl_script.c:792:9: warning: implicit declaration of function ‘itoa’ [-Wimplicit-function-declaration]
         itoa(apt->num, name, 10);
         ^
nicholas@LinuxNick ~/.apps/keeperfx/bin $ sudo i686-w64-mingw32-gcc-win32 -I/usr/include -L/usr/local/lib -liconv ../src/*.c -o keeperfx/
[sudo] password for nicholas: 
../src/bflib_crash.c: In function ‘sigstr’:
../src/bflib_crash.c:77:10: error: ‘SIGBREAK’ undeclared (first use in this function)
     case SIGBREAK : return "Ctrl-Break (Win32)";
          ^
../src/bflib_crash.c:77:10: note: each undeclared identifier is reported only once for each function it appears in
../src/bflib_crash.c: In function ‘LbErrorParachuteInstall’:
../src/bflib_crash.c:189:12: error: ‘SIGBREAK’ undeclared (first use in this function)
     signal(SIGBREAK,ctrl_handler);
            ^
In file included from ../src/bflib_dernc.c:26:0:
/usr/include/fcntl.h:202:12: error: conflicting types for ‘creat’
 extern int creat (const char *__file, mode_t __mode) __nonnull ((1));
            ^
In file included from ../src/bflib_dernc.c:25:0:
/usr/share/mingw-w64/include/io.h:314:15: note: previous declaration of ‘creat’ was here
   int __cdecl creat(const char *_Filename,int _PermissionMode) __MINGW_ATTRIB_D
               ^
In file included from ../src/bflib_dernc.c:27:0:
/usr/include/sys/stat.h:283:12: error: conflicting types for ‘chmod’
 extern int chmod (const char *__file, __mode_t __mode)
            ^
In file included from ../src/bflib_dernc.c:25:0:
/usr/share/mingw-w64/include/io.h:311:15: note: previous declaration of ‘chmod’ was here
   int __cdecl chmod(const char *_Filename,int _AccessMode) __MINGW_ATTRIB_DEPRE
               ^
In file included from ../src/bflib_dernc.c:27:0:
/usr/include/sys/stat.h:311:17: error: conflicting types for ‘umask’
 extern __mode_t umask (__mode_t __mask) __THROW;
                 ^
In file included from ../src/bflib_dernc.c:25:0:
/usr/share/mingw-w64/include/io.h:328:15: note: previous declaration of ‘umask’ was here
   int __cdecl umask(int _Mode) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
               ^
In file included from ../src/bflib_dernc.c:27:0:
/usr/include/sys/stat.h:320:12: error: conflicting types for ‘mkdir’
 extern int mkdir (const char *__path, __mode_t __mode)
            ^
In file included from ../src/bflib_dernc.c:25:0:
/usr/share/mingw-w64/include/io.h:267:15: note: previous declaration of ‘mkdir’ was here
   int __cdecl mkdir (const char *) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
               ^
In file included from ../src/bflib_fileio.c:28:0:
/usr/include/fcntl.h:202:12: error: conflicting types for ‘creat’
 extern int creat (const char *__file, mode_t __mode) __nonnull ((1));
            ^
In file included from ../src/bflib_basics.h:23:0,
                 from ../src/bflib_fileio.h:23,
                 from ../src/bflib_fileio.c:22:
/usr/share/mingw-w64/include/io.h:314:15: note: previous declaration of ‘creat’ was here
   int __cdecl creat(const char *_Filename,int _PermissionMode) __MINGW_ATTRIB_D
               ^
In file included from ../src/bflib_fileio.c:29:0:
/usr/include/sys/stat.h:283:12: error: conflicting types for ‘chmod’
 extern int chmod (const char *__file, __mode_t __mode)
            ^
In file included from ../src/bflib_basics.h:23:0,
                 from ../src/bflib_fileio.h:23,
                 from ../src/bflib_fileio.c:22:
/usr/share/mingw-w64/include/io.h:311:15: note: previous declaration of ‘chmod’ was here
   int __cdecl chmod(const char *_Filename,int _AccessMode) __MINGW_ATTRIB_DEPRE
               ^
In file included from ../src/bflib_fileio.c:29:0:
/usr/include/sys/stat.h:311:17: error: conflicting types for ‘umask’
 extern __mode_t umask (__mode_t __mask) __THROW;
                 ^
In file included from ../src/bflib_basics.h:23:0,
                 from ../src/bflib_fileio.h:23,
                 from ../src/bflib_fileio.c:22:
/usr/share/mingw-w64/include/io.h:328:15: note: previous declaration of ‘umask’ was here
   int __cdecl umask(int _Mode) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
               ^
In file included from ../src/bflib_fileio.c:29:0:
/usr/include/sys/stat.h:320:12: error: conflicting types for ‘mkdir’
 extern int mkdir (const char *__path, __mode_t __mode)
            ^
In file included from ../src/bflib_basics.h:23:0,
                 from ../src/bflib_fileio.h:23,
                 from ../src/bflib_fileio.c:22:
/usr/share/mingw-w64/include/io.h:267:15: note: previous declaration of ‘mkdir’ was here
   int __cdecl mkdir (const char *) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
               ^
../src/bflib_fileio.c: In function ‘LbFileOpen’:
../src/bflib_fileio.c:237:43: error: ‘O_BINARY’ undeclared (first use in this function)
         rc = _sopen(fname, O_RDWR|O_CREAT|O_BINARY, SH_DENYNO, S_IREAD|S_IWRITE
                                           ^
../src/bflib_fileio.c:237:43: note: each undeclared identifier is reported only once for each function it appears in
In file included from /usr/include/bits/errno.h:24:0,
                 from /usr/include/errno.h:35,
                 from /usr/share/mingw-w64/include/intrin.h:65,
                 from /usr/include/SDL2/SDL_cpuinfo.h:44,
                 from /usr/include/SDL2/SDL.h:38,
                 from ../src/bflib_keybrd.c:25:
/usr/include/linux/errno.h:1:23: fatal error: asm/errno.h: No such file or directory
compilation terminated.
../src/bflib_math.c: In function ‘LbRandomSeries’:
../src/bflib_math.c:746:11: warning: implicit declaration of function ‘_lrotr’ [-Wimplicit-function-declaration]
   *seed = _lrotr(i, 13);
           ^
../src/bflib_tcpsp.c:26:26: fatal error: SDL2/SDL_net.h: No such file or directory
 #include <SDL2/SDL_net.h>
                          ^
compilation terminated.
In file included from /usr/include/bits/errno.h:24:0,
                 from /usr/include/errno.h:35,
                 from /usr/share/mingw-w64/include/intrin.h:65,
                 from /usr/include/SDL2/SDL_cpuinfo.h:44,
                 from /usr/include/SDL2/SDL.h:38,
                 from ../src/bflib_video.c:27:
/usr/include/linux/errno.h:1:23: fatal error: asm/errno.h: No such file or directory
compilation terminated.
In file included from /usr/include/bits/errno.h:24:0,
                 from /usr/include/errno.h:35,
                 from /usr/share/mingw-w64/include/intrin.h:65,
                 from /usr/include/SDL2/SDL_cpuinfo.h:44,
                 from /usr/include/SDL2/SDL.h:38,
                 from ../src/bflib_vidsurface.c:25:
/usr/include/linux/errno.h:1:23: fatal error: asm/errno.h: No such file or directory
compilation terminated.
../src/config.c: In function ‘recognize_conf_command’:
../src/config.c:275:13: warning: implicit declaration of function ‘strnicmp’ [-Wimplicit-function-declaration]
         if (strnicmp(buf+(*pos), commands[i].name, cmdname_len) == 0)
             ^
../src/config.c: In function ‘get_language_lwrstr’:
../src/config.c:424:3: warning: implicit declaration of function ‘strlwr’ [-Wimplicit-function-declaration]
   strlwr(lang_str);
   ^
../src/front_network.c: In function ‘net_write_config_file’:
../src/front_network.c:503:9: warning: implicit declaration of function ‘strupr’ [-Wimplicit-function-declaration]
         strupr(net_config_info.str_atz);
         ^
../src/lvl_filesdk1.c: In function ‘get_level_number_from_file_name’:
../src/lvl_filesdk1.c:108:7: warning: implicit declaration of function ‘strnicmp’ [-Wimplicit-function-declaration]
   if (strnicmp(fname,"map",3) != 0)
       ^
../src/lvl_script.c: In function ‘get_next_word’:
../src/lvl_script.c:446:9: warning: implicit declaration of function ‘strupr’ [-Wimplicit-function-declaration]
         strupr(param);
         ^
../src/lvl_script.c: In function ‘get_map_location_code_name’:
../src/lvl_script.c:792:9: warning: implicit declaration of function ‘itoa’ [-Wimplicit-function-declaration]
         itoa(apt->num, name, 10);
         ^

I am using the command i686-w64-mingw32-gcc-win32 -I/usr/include -L/usr/local/lib -liconv ../src/*.c for compiling. However, even adding an output location, doesn't spit out an output file.

I don't know what else to do here.

My system runs 64-bit Linux Mint version 18.1 on Cinnamon.

  • 1
    Is the question “Is it possible to cross-compile C++ source code, that was originally written for Microsoft's Windows to Gnu/linux?” – ctrl-alt-delor May 22 '17 at 16:59
  • Most C++ for microsoft's Windows was written for Microsoft's C++ compiler. This is considered by many to be “C++, but not as we know it”, or in other words not standards compliment. Unless someone has put some effort in to making a Microsoft incompatible compiler, then you have no change. – ctrl-alt-delor May 22 '17 at 17:02
  • But I thought the point of mingw was to bypass that and compile Windows source files from C and C++ on linux. Maybe I am misunderstanding? – Vencorr May 22 '17 at 19:28
  • 1
    The GNU / mingw toolchain may allow you to cross-compile (i.e. build software on Linux, but for Windows) - there's really no magic solution for turning Windows source code into a native Linux binary AFAIK - unless it happens to be "pure" C/C++ that doesn't rely on any Windows components. (It may be possible to cross-compile and then run it under Wine). – steeldriver May 22 '17 at 19:54
  • I want to avoid using wine. How can I tell if it happens to use pure C/C++? Is it possible keeperfx happens to be pure C/C++? – Vencorr May 22 '17 at 20:53
1

The first set of errors happens because the source code is only intended for 32-bit targets. When building KeeperFX, you can force this (if your compiler is set up correctly) by running

make CPP="g++ -m32"

but then you run into missing headers — windows.h, winbase.h, io.h, basetyps.h when building src/main.cpp — which suggests that the code is written for Windows with no portability concerns. It’s not “pure C/C++”.

KeeperFX does appear to support building with some versions of MinGW or MinGW-w64 at least, but as has been pointed out in the comments that only allows you to build a Windows binary on Linux. So you can build on Linux, using

make CROSS_COMPILE=i686-w64-mingw32-

and an appropriate cross-compiler, but the resulting binary will need Wine to run on Linux. (On Mint, the appropriate cross-compiler is g++-mingw-w64.)

It might be possible to port KeeperFX to SDL without huge amounts of effort, I haven’t looked into it in detail.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.