简体   繁体   中英

How to compile doom on ubuntu?

I am trying to compile the source code for the original doom as a way to learn C. I downloaded it from github and fixed an obvious mistake in i_video.c line 49 (errnos.h -> errno.h).

I now get this:

m_misc.c:257:5: warning: initialization from incompatible pointer type [enabled by default]
m_misc.c:257:5: warning: (near initialization for ‘defaults[14].location’) [enabled by default]
m_misc.c:257:5: error: initializer element is not computable at load time
m_misc.c:257:5: error: (near initialization for ‘defaults[14].defaultvalue’)
m_misc.c:264:35: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
m_misc.c:264:5: error: initializer element is not constant
m_misc.c:264:5: error: (near initialization for ‘defaults[16].defaultvalue’)
m_misc.c:265:37: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
m_misc.c:265:5: error: initializer element is not constant
m_misc.c:265:5: error: (near initialization for ‘defaults[17].defaultvalue’)
m_misc.c:288:45: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
m_misc.c:288:5: error: initializer element is not constant
m_misc.c:288:5: error: (near initialization for ‘defaults[31].defaultvalue’)
m_misc.c:289:45: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
m_misc.c:289:5: error: initializer element is not constant
m_misc.c:289:5: error: (near initialization for ‘defaults[32].defaultvalue’)
m_misc.c:290:45: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
m_misc.c:290:5: error: initializer element is not constant
m_misc.c:290:5: error: (near initialization for ‘defaults[33].defaultvalue’)
m_misc.c:291:45: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
m_misc.c:291:5: error: initializer element is not constant
m_misc.c:291:5: error: (near initialization for ‘defaults[34].defaultvalue’)
m_misc.c:292:45: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
m_misc.c:292:5: error: initializer element is not constant
m_misc.c:292:5: error: (near initialization for ‘defaults[35].defaultvalue’)
m_misc.c:293:45: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
m_misc.c:293:5: error: initializer element is not constant
m_misc.c:293:5: error: (near initialization for ‘defaults[36].defaultvalue’)
m_misc.c:294:45: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
m_misc.c:294:5: error: initializer element is not constant
m_misc.c:294:5: error: (near initialization for ‘defaults[37].defaultvalue’)
m_misc.c:295:45: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
m_misc.c:295:5: error: initializer element is not constant
m_misc.c:295:5: error: (near initialization for ‘defaults[38].defaultvalue’)
m_misc.c:296:45: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
m_misc.c:296:5: error: initializer element is not constant
m_misc.c:296:5: error: (near initialization for ‘defaults[39].defaultvalue’)
m_misc.c:297:45: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
m_misc.c:297:5: error: initializer element is not constant
m_misc.c:297:5: error: (near initialization for ‘defaults[40].defaultvalue’)
m_misc.c: In function ‘M_LoadDefaults’:
m_misc.c:395:5: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
make: *** [linux/m_misc.o] Error 1

in the m_misc.c file during this declaration on the lines that contain casts:

default_t   defaults[] =
{
    {"mouse_sensitivity",&mouseSensitivity, 5},
    {"sfx_volume",&snd_SfxVolume, 8},
    {"music_volume",&snd_MusicVolume, 8},
    {"show_messages",&showMessages, 1},


#ifdef NORMALUNIX
    {"key_right",&key_right, KEY_RIGHTARROW},
    {"key_left",&key_left, KEY_LEFTARROW},
    {"key_up",&key_up, KEY_UPARROW},
    {"key_down",&key_down, KEY_DOWNARROW},
    {"key_strafeleft",&key_strafeleft, ','},
    {"key_straferight",&key_straferight, '.'},

    {"key_fire",&key_fire, KEY_RCTRL},
    {"key_use",&key_use, ' '},
    {"key_strafe",&key_strafe, KEY_RALT},
    {"key_speed",&key_speed, KEY_RSHIFT},

// UNIX hack, to be removed. 
#ifdef SNDSERV
    {"sndserver", (int *) &sndserver_filename, (int) "sndserver"},
    {"mb_used", &mb_used, 2},
#endif

#endif

#ifdef LINUX
    {"mousedev", (int*)&mousedev, (int)"/dev/ttyS0"},
    {"mousetype", (int*)&mousetype, (int)"microsoft"},
#endif

    {"use_mouse",&usemouse, 1}, 
    {"mouseb_fire",&mousebfire,0},
    {"mouseb_strafe",&mousebstrafe,1},
    {"mouseb_forward",&mousebforward,2},

    {"use_joystick",&usejoystick, 0}, 
    {"joyb_fire",&joybfire,0},
    {"joyb_strafe",&joybstrafe,1},
    {"joyb_use",&joybuse,3},
    {"joyb_speed",&joybspeed,2},

    {"screenblocks",&screenblocks, 9}, 
    {"detaillevel",&detailLevel, 0}, 

    {"snd_channels",&numChannels, 3}, 



    {"usegamma",&usegamma, 0},
    {"chatmacro0", (int *) &chat_macros[0], (int) HUSTR_CHATMACRO0 },
    {"chatmacro1", (int *) &chat_macros[1], (int) HUSTR_CHATMACRO1 },
    {"chatmacro2", (int *) &chat_macros[2], (int) HUSTR_CHATMACRO2 },
    {"chatmacro3", (int *) &chat_macros[3], (int) HUSTR_CHATMACRO3 },
    {"chatmacro4", (int *) &chat_macros[4], (int) HUSTR_CHATMACRO4 },
    {"chatmacro5", (int *) &chat_macros[5], (int) HUSTR_CHATMACRO5 },
    {"chatmacro6", (int *) &chat_macros[6], (int) HUSTR_CHATMACRO6 },
    {"chatmacro7", (int *) &chat_macros[7], (int) HUSTR_CHATMACRO7 },
    {"chatmacro8", (int *) &chat_macros[8], (int) HUSTR_CHATMACRO8 },
    {"chatmacro9", (int *) &chat_macros[9], (int) HUSTR_CHATMACRO9 }

};

Is this an incompatibility with modern compilers? Has anyone managed to get passed it?

If you are using 64-bit compiler, try to use the -m32 flag and link with -L/usr/lib/i386-linux-gnu/ for 32-bit libraries.

By the way, if you will compile this source, you will still have an issue with running as this build needs 320x200 screen resolution. Otherwise it will not run.

I am working on the SDL port of the DOOM, so you can try my source from the GitHub .

You will need to install SDL library to run it. Also, there is no sound there.

As for the initializer list error, it's right there - the elements in the initializer lists are not constant expressions. Take a look at this:

{"mousedev", (int*)&mousedev, (int)"/dev/ttyS0"},

I guess mousedev is another variable. There you have it.

I can't remember now, but I think non-constants in initializer lists were introduced in one of the later C standards. Try making the compiler stick to a different one - I'd take a shot with C99. http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options

The one about integer vs pointer size was correctly answered by Alex.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM