On Wednesday 22 December 2010 19:25:35 Peter Federighi wrote: > Hello all. > > I'm writing a simple terminal game (that will eventually be turned into a > simple SDL game) and thought I would add mouse support via libgpm. So, I > converted gpm.h into gpm.d. Perhaps I didn't do this correctly because I > get several undefined references when trying to link. > > Here's an example: > The original gpm.h says: > extern int gpm_zerobased; > extern unsigned char _gpm_buf[]; > extern unsigned short * _gpm_arg; > > My gpm.d says: > extern int gpm_zerobased; > extern char* _gpm_buf; > extern ushort* _gpm_arg; > > When running 'dmd gev.d gpm.d -L-lgpm', I get: > gpm.d:(.text._D3gpm15Gpm_DrawPointerFiiiZv+0x12): undefined reference to > `_D3gpm8_gpm_bufPa' > gpm.d:(.text._D3gpm15Gpm_DrawPointerFiiiZv+0x26): undefined reference to > `_D3gpm13gpm_zerobasedi' > gpm.d:(.text._D3gpm15Gpm_DrawPointerFiiiZv+0x34): undefined reference to > `_D3gpm8_gpm_argPt' > > Does anyone have any ideas?
Did you wrap the C declarations in an extern(C) block? Without that, it's going to think that your variables are D variables not C variables. The same goes for any functions - _especially_ for the functions. In fact, a large portion of - in not all of - your gpm.d file should likely be in extern(C). You can try htod ( http://www.digitalmars.com/d/2.0/htod.html ) and see what it creates. It won't necessarily be correct, but it might be, and it might give you a better idea of where you screwed up. It's a Windows program, but it will run in wine. - Jonathan M Davis