22 Oct, 2010, Bobo the bee wrote in the 1st comment:
Votes: 0
(also posted on SmaugMuds.org)

So, in trying to add a new global variable to keep track of the last color used by the MUD, but I've run into a bit of an issue. The code itself compiles, up until the very end when I receive this error message:

$make -s smaug
Compiling o/color.o….
o/color.o: In function `_Z11set_lastcolPc':
…/quarulid/src/color.c:1878: undefined reference to `_last_col'
…/quarulid/src/color.c:1884: undefined reference to `_last_col'
collect2: ld returned 1 exit status
make[1]: *** [smaug] Error 1
make: *** [all] Error 2


However, in mud.h I certainly have this:
extern char last_col[2];


The code the uses last_col is:
void set_lastcol( char *col )
{
char thecol[2] ;

if( !col && !IS_NULLSTR(col))
{
thecol[0] = 'x' ;
thecol[1] = '\0' ;
mudstrlcpy( last_col , thecol, 2 ) ;
return ;
}

thecol[0] = col[0] ;
thecol[1] = '\0' ;
mudstrlcpy( last_col , thecol, 2 ) ;

return ;
}
22 Oct, 2010, Tyche wrote in the 2nd comment:
Votes: 0
All I see is a declaration of last_col.
You don't define last_col anywhere in your program.

Maybe this page will help: TutorialFunctionDeclarationsAndDefinitio...

What "extern char last_col[2];" means to the compiler is that there exists a variable called last_col somewhere.
It doesn't define it.
22 Oct, 2010, Bobo the bee wrote in the 3rd comment:
Votes: 0
And, yep, this was indeed the problem. Not being used to larger-scale programs, I keep forgetting that setting something in a header file doesn't mean it exists as of yet. A simple error, and thanks for pointing it out. To any who might wonder, a declaration of

char last_col[2] ;


before set_lastcol() was the issue
22 Oct, 2010, Tyche wrote in the 4th comment:
Votes: 0
Bobo the bee said:
To any who might wonder, a declaration of

char last_col[2] ;


before set_lastcol() was the issue


That's a definition. ;-)
22 Oct, 2010, Bobo the bee wrote in the 5th comment:
Votes: 0
Tyche said:
That's a definition. ;-)


It's late. :wink:
0.0/5