And not having any luck. I download the texinfo package, configure, fix the makeinfo line on the Makefile, and make. Make runs for about 20-30 minutes before it errors out. I spent most the weekend trying to get 4.1.2 installed. (My software will only compile under 4.1.2...and there is far too much code and I am far too unskilled a C++ coder to fix it and make it compatable with the latest GCC.)
After tearing my hair out all weekend, I am about ready to throw in the towel...but I really want to get this working now. It's gotten personal.
Is there any linux distros out there that use GCC/G++ 4.1.2 natively? (Even if I have to download a seriously old distro?)
EDIT: Decided to just fix the source code to let it compile using the latest GCC. I am now stuck as a non-C++ coding fool. See below!
Well, I've decided to take your advice and just recode...it actually wasn't that much - it was the same error in 6 files, that made fine. I corrected them. I do have one that I can't figure out. First Code block contains the error, and the rest contains the file contents. I'm really lost at this point. The ID-10-T may apply now:
Error:
g++ -DDEBUG -Dlinux -Wno-deprecated -I /usr/local/include/ -ggdb -c -o vtable.o vtable.cpp
vtable.cpp: In static member function ‘static void VTable::separate(const char*, char*, char*)’:
vtable.cpp:322: error: invalid conversion from ‘const char*’ to ‘char*’
make: *** [vtable.o] Error 1
vtable.h
// file: vtable.h
// author: Andrew Hynek
// contents: a value table (VTable) class
#ifndef __vtable_h__
#define __vtable_h__
class File;
class VTable
{
static const int MAX_SECTION_LENGTH = 32;
static const int MAX_FIELD_LENGTH = 32;
static const int MAX_LINE_LENGTH = 256;
struct field
{
char name[MAX_FIELD_LENGTH];
char line[MAX_LINE_LENGTH];
char *multiline;
field() : multiline(NULL)
{
*name = '\0';
*line = '\0';
}
~field();
field &operator=(const field &two)
{
// do a deep copy
strcpy(name, two.name);
strcpy(line, two.line);
if (two.multiline) {
if (!multiline) {
multiline = new char[strlen(two.multiline)+1];
strcpy(multiline, two.multiline);
} else if (strcmp(multiline, two.multiline)) {
delete [] multiline;
multiline = new char[strlen(two.multiline)+1];
strcpy(multiline, two.multiline);
}
} else if (multiline) {
delete [] multiline;
multiline = NULL;
}
return (*this);
}
};
struct section
{
char name[MAX_SECTION_LENGTH]; // NULL for top
section *parent;
section *sub_tab;
int sub_cnt;
int sub_size;
field *field_tab;
int field_cnt;
int field_size;
section() : parent(NULL),
sub_tab(NULL), sub_cnt(0), sub_size(0),
field_tab(NULL), field_cnt(0), field_size(0)
{
*name = '\0';
}
~section();
section &operator=(const section &two)
{
strcpy(name, two.name);
parent = two.parent;
if (two.sub_tab && two.sub_cnt > 0) {
sub_size = two.sub_size;
sub_cnt = two.sub_cnt;
if (sub_tab)
delete [] sub_tab;
sub_tab = new section[sub_size];
for (int i = 0; i < sub_cnt; i++)
sub_tab[i] = two.sub_tab[i];
} else {
sub_cnt = 0;
sub_size = 0;
if (sub_tab) {
delete [] sub_tab;
sub_tab = NULL;
}
}
if (two.field_tab && two.field_cnt > 0) {
field_size = two.field_size;
field_cnt = two.field_cnt;
if (field_tab)
delete [] field_tab;
field_tab = new field[field_size];
for (int i = 0; i < field_cnt; i++)
field_tab[i] = two.field_tab[i];
} else {
field_cnt = 0;
field_size = 0;
if (field_tab) {
delete [] field_tab;
field_tab = NULL;
}
}
return (*this);
}
};
section top;
public:
int NumSections() const;
int NumSubsections(const char *sect);
int NumFields(const char *sect_name);
bool DoesSectionExist(const char *sect);
bool DoesFieldExist(const char *where);
// returns the number of fields successfully parsed
int Parse(File *in);
int GetInt(const char *where, int defawlt);
long GetLong(const char *where, long defawlt);
// assumes lookup_tab is "\n"-terminated, returns index of string in tab
int LookupInt(const char *where, const char **lookup_tab, int defawlt);
const char *GetString(const char *where, const char *defawlt);
float GetFloat(const char *where, float defawlt);
// returns a pointer (don't delete) to field name of nth field in section
const char *GetIndexField(const char *sect_name, int n);
// like GetIndexField, but for subsection names
const char *GetIndexSection(const char *sect_name, int n);
// returns the int of the nth field in section
int GetIndexInt(const char *sect_name, int n, int defawlt);
const char *GetIndexString(const char *sect_name, int n,
const char *defawlt);
// float GetIndexFloat();
// bool AddInt(const char *where, int n);
// bool AddString(const char *where, const char *str);
// bool AddFloat(const char *where, float f);
private:
static void separate(const char *where,
char section[MAX_SECTION_LENGTH],
char field[MAX_FIELD_LENGTH]);
void resize_subsection_tab(section *ptr, int empty = 5);
void resize_field_tab(section *ptr, int empty = 5);
field *find_field(const char *where);
section *find_section(const char *sect);
section *look_for_section(section *ptr, const char *name);
int count_subsections(const section *ptr) const;
};
#endif // ifndef __vtable_h__
vtable.cpp
// file: vtable.cpp
// author: Andrew Hynek
// contents: implementation of the VTable class
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "file.h"
#include "vtable.h"
#include "utils.h" // for str_cmp(), log()
VTable::field::~field()
{
if (multiline) {
delete [] multiline;
multiline = NULL;
}
}
VTable::section::~section()
{
*name = '\0';
parent = NULL;
if (sub_tab) {
delete [] sub_tab;
sub_tab = NULL;
}
sub_cnt = 0;
sub_size = 0;
if (field_tab) {
delete [] field_tab;
field_tab = NULL;
}
field_cnt = 0;
field_size = 0;
}
int VTable::NumSections() const
{
return (count_subsections(&top)+1);
}
int VTable::NumSubsections(const char *sect)
{
section *ptr = find_section(sect);
if (!ptr)
return -1;
return ptr->sub_cnt;
}
int VTable::NumFields(const char *sect)
{
section *ptr = find_section(sect);
if (!ptr)
return -1;
return ptr->field_cnt;
}
bool VTable::DoesSectionExist(const char *sect)
{
return (find_section(sect) != NULL);
}
bool VTable::DoesFieldExist(const char *where)
{
return (find_field(where) != NULL);
}
#define SKIP { in->GetLine(line, MAX_LINE_LENGTH*2, FALSE); continue; }
int VTable::Parse(File *in)
{
char line[MAX_LINE_LENGTH*2];
int depth = 0, total_fields = 0;
section *sec_ptr = ⊤
in->GetLine(line, MAX_LINE_LENGTH*2, FALSE);
while (!in->EoF() && str_cmp(line, "BREAK")) {
char *line_ptr = line;
int d;
bool multiline_input = false;
// skip spaces
while (*line_ptr && *line_ptr == ' ')
line_ptr++;
// calculate depth (1 per leading tab)
d = 0;
while (*line_ptr == '\t') {
line_ptr++;
d++;
}
// printf("depth=%d, d=%d, line_ptr=%s\n", depth, d, line_ptr);
if (d > depth) {
log("Warning: depth doesn't match field depth (%d != %d) (%s, line %d)",
d, depth, in->Filename(), in->LineNumber());
SKIP;
} else
while (d < depth) {
// while the current depth < sec_ptr_depth, pull out a level
sec_ptr = sec_ptr->parent;
depth––;
}
{ // check for section title
char *open = strchr(line_ptr, '[');
char *close = strchr(line_ptr, ']');
// if it's there at at the beginning of the line,
// descend into another level
if (open && close && close > open && open == line_ptr) {
// check to see if we need a new table
if (!sec_ptr->sub_tab || sec_ptr->sub_cnt >= sec_ptr->sub_size)
resize_subsection_tab(sec_ptr);
section *new_sec = sec_ptr->sub_tab+sec_ptr->sub_cnt;
sec_ptr->sub_cnt++;
// set the data:
new_sec->parent = sec_ptr;
char *src = open+1, *dst = new_sec->name;
while (*src != ']') { // we know ']' is there, for sure
*(dst++) = *(src++);
}
*dst = '\0';
// set depth and sec_ptr, then skip
sec_ptr = new_sec;
depth++;
//printf("read section title %s, inc'ing depth\n", sec_ptr->name);
SKIP;
}
}
// so we know by this point that we have a potential field,
// so first check to see if we need a new table
if (!sec_ptr->field_tab || sec_ptr->field_cnt >= sec_ptr->field_size)
resize_field_tab(sec_ptr);
// then get the next field entry
field *field_ptr = sec_ptr->field_tab+sec_ptr->field_cnt;
char *name_ptr = field_ptr->name;
// copy the field name, until ":\t" or ":$"
while (*line_ptr) {
if (*line_ptr == ':' &&
(*(line_ptr+1) == '\t' || *(line_ptr+1) == '$'))
break;
if((name_ptr-field_ptr->name) > MAX_FIELD_LENGTH)
field_ptr->name[MAX_FIELD_LENGTH - 1] = '\0';
*(name_ptr++) = *(line_ptr++);
}
*name_ptr = '\0';
// make sure we've got a field name
if (!*line_ptr) {
log("Invalid field: '%s' (%s, line %d)",
line, in->Filename(), in->LineNumber());
SKIP;
}
//printf("continuing with field %s\n", field_ptr->name);
// and if we do, advance the field_cnt and continue
sec_ptr->field_cnt++;
total_fields++;
// advance line_ptr past the ":\t" or ":$", and skip the spaces
if (*line_ptr == ':') {
if (*(line_ptr+1) == '$') {
multiline_input = true;
line_ptr += 2;
} else if (*(line_ptr+1) == '\t')
line_ptr += 2;
while (*line_ptr && (*line_ptr == ' ' || *line_ptr == '\t'))
line_ptr++;
}
// now if we have a single line, just copy the rest of the line
if (!multiline_input) {
memset(field_ptr->line, 0, MAX_LINE_LENGTH);
strncpy(field_ptr->line, line_ptr, MAX_LINE_LENGTH);
} else {
// otherwise use ReadString to get a '~'-terminated multiline string
field_ptr->multiline = in->ReadString();
}
in->GetLine(line, MAX_LINE_LENGTH*2, FALSE);
}
return total_fields;
}
#undef SKIP
int VTable::GetInt(const char *where, int defawlt)
{
field *ptr = find_field(where);
if (!ptr)
return defawlt;
return atoi(ptr->line);
}
long VTable::GetLong(const char *where, long defawlt)
{
field *ptr = find_field(where);
if (!ptr)
return defawlt;
return atol(ptr->line);
}
int VTable::LookupInt(const char *where,
const char **lookup_tab, int defawlt)
{
field *ptr = find_field(where);
if (!ptr)
return defawlt;
int i;
for (i = 0; *lookup_tab[i] != '\n'; i++)
if (!str_cmp(ptr->line, lookup_tab[i]))
return i;
return defawlt;
}
const char *VTable::GetString(const char *where, const char *defawlt)
{
field *ptr = find_field(where);
if (!ptr) {
return defawlt;
}
return (ptr->multiline? ptr->multiline : ptr->line);
}
float VTable::GetFloat(const char *where, float defawlt)
{
field *ptr = find_field(where);
if (!ptr)
return defawlt;
return (float)atof(ptr->line);
}
const char *VTable::GetIndexField(const char *sect_name, int n)
{
section *ptr = find_section(sect_name);
if (!ptr)
return NULL;
return ptr->field_tab[n].name;
}
const char *VTable::GetIndexSection(const char *sect_name, int n)
{
section *ptr = find_section(sect_name);
if (!ptr)
return NULL;
return ptr->sub_tab[n].name;
}
int VTable::GetIndexInt(const char *sect_name, int n, int defawlt)
{
section *ptr = find_section(sect_name);
if (!ptr)
return defawlt;
return atoi(ptr->field_tab[n].line);
}
const char *VTable::GetIndexString(const char *sect_name, int n,
const char *defawlt)
{
section *ptr = find_section(sect_name);
if (!ptr)
return defawlt;
return (ptr->field_tab[n].multiline? ptr->field_tab[n].multiline
: ptr->field_tab[n].line);
}
void VTable::separate(const char *where,
char sect_name[MAX_SECTION_LENGTH],
char field_name[MAX_FIELD_LENGTH])
{
const char *src_ptr = where;
char *sec_ptr = sect_name, *field_ptr = field_name;
*sec_ptr = *field_ptr = '\0';
while (*src_ptr && *src_ptr == ' ')
src_ptr++;
char *delim = strchr(src_ptr, '/');
if (!delim) {
strncpy(field_name, src_ptr, MAX_FIELD_LENGTH);
*(field_name + MAX_FIELD_LENGTH - 1) = '\0';
} else {
if ((delim-src_ptr) < MAX_SECTION_LENGTH) {
strncpy(sect_name, src_ptr, delim-src_ptr);
*(sect_name + (delim-src_ptr)) = '\0';
} else {
strncpy(sect_name, src_ptr, MAX_SECTION_LENGTH);
*(sect_name + MAX_SECTION_LENGTH - 1) = '\0';
}
strncpy(field_name, delim+1, MAX_FIELD_LENGTH);
*(field_name + MAX_FIELD_LENGTH - 1) = '\0';
}
}
void VTable::resize_subsection_tab(section *ptr, int empty)
{
if (ptr->sub_tab && ptr->sub_cnt < ptr->sub_size)
return;
ptr->sub_size += empty;
section *new_tab = new section[ptr->sub_size];
if (ptr->sub_tab) {
for (int k = 0; k < ptr->sub_cnt; k++)
new_tab[k] = ptr->sub_tab[k];
delete [] ptr->sub_tab;
}
ptr->sub_tab = new_tab;
}
void VTable::resize_field_tab(section *ptr, int empty)
{
if (ptr->field_tab && ptr->field_cnt < ptr->field_size)
return;
ptr->field_size += empty;
field *new_tab = new field[ptr->field_size];
if (ptr->field_tab) {
for (int k = 0; k < ptr->field_cnt; k++)
new_tab[k] = ptr->field_tab[k];
delete [] ptr->field_tab;
}
ptr->field_tab = new_tab;
}
VTable::field *VTable::find_field(const char *where)
{
char sect[MAX_SECTION_LENGTH], field_name[MAX_FIELD_LENGTH];
separate(where, sect, field_name);
section *ptr = find_section(sect);
if (!ptr || !*field_name)
return NULL;
for (int i = 0; i < ptr->field_cnt; i++)
if (!str_cmp(ptr->field_tab[i].name, field_name))
return (ptr->field_tab+i);
return NULL;
}
VTable::section *VTable::find_section(const char *sect)
{
if (!sect || !*sect)
return ⊤
return (look_for_section(&top, sect));
}
VTable::section *VTable::look_for_section(section *ptr,
const char *name)
{
if (!ptr)
return NULL;
if (!str_cmp(ptr->name, name))
return ptr;
for (int i = 0; i < ptr->sub_cnt; i++) {
section *ret = look_for_section(ptr->sub_tab+i, name);
if (ret)
return ret;
}
return NULL;
}
int VTable::count_subsections(const section *ptr) const
{
if (!ptr)
return 0;
int count = 0;
for (int i = 0; i < ptr->sub_cnt; i++)
count += count_subsections(ptr->sub_tab+i);
return count;
}
Well, tried to drop the const from it on my lunch break, and it threw up at me....I'm reaaaaaaallly stumped on this one.
please point out line 322 as the compile sees it, after the pre-processor.. if the stuff below is not the correct line 322
const char *src_ptr = where;
<snip>
char *delim = strchr(src_ptr, '/');
http://www.cplusplus.com/reference/clibrary/cstring/strchr/
const char * strchr ( const char * str, int character );
char * strchr ( char * str, int character );
Originally Posted By azych:
At line 322 of vtable.cpp:
char *delim = strchr(src_ptr, '/');
strchr() returns a const char*. Try changing char *delim to const char* delim, i.e.:
const char* delim = strchr(src_ptr, '/');
BINGO!
Now its throwing one more....hopefully this is the last file with errors:
jrsteensen@devhost:~/sol_dev/src$ make
touch ../bin/awake
rm ../bin/awake
g++ -o ../bin/awake -ggdb act.comm.o act.drive.o act.informative.o act.movement.o act.obj.o act.offensive.o act.other.o act.social.o act.wizard.o ban.o bitfield.o boards.o chargen.o comm.o config.o constants.o db.o dblist.o deck_build.o fight.o file.o graph.o guncreate.o handler.o hedit.o house.o icedit.o iedit.o interpreter.o limits.o magcreate.o mail.o medit.o memory.o mobact.o modify.o newdb.o newmagic.o newmail.o newmatrix.o newshop.o olc.o pocketsec.o pro_create.o quest.o redit.o screen.o spec_assign.o spec_procs.o transport.o utils.o vedit.o vtable.o weather.o zedit.o -lcrypt -L/usr/local/lib -lmysqlclient -lz -lm -lnsl
act.obj.o: In function `give_find_vict(char_data*, char*)':
/home/jrsteensen/sol_dev/src/act.obj.cpp:1477: undefined reference to `fixer(char_data*, void*, int, char*)'
act.obj.o: In function `do_eat(char_data*, char*, int, int)':
/home/jrsteensen/sol_dev/src/act.obj.cpp:1815: undefined reference to `anticoagulant(char_data*, void*, int, char*)'
act.other.o: In function `do_spray(char_data*, char*, int, int)':
/home/jrsteensen/sol_dev/src/act.other.cpp:3703: undefined reference to `spraypaint(char_data*, void*, int, char*)'
spec_assign.o: In function `assign_mobiles()':
/home/jrsteensen/sol_dev/src/spec_assign.cpp:367: undefined reference to `janitor(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:370: undefined reference to `terell_davis(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:375: undefined reference to `aegnor(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:376: undefined reference to `fixer(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:377: undefined reference to `purple_haze_bartender(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:379: undefined reference to `receptionist(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:380: undefined reference to `generic_guard(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:383: undefined reference to `generic_guard(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:384: undefined reference to `hacker(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:385: undefined reference to `janitor(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:386: undefined reference to `fence(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:389: undefined reference to `penumbra_troll(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:390: undefined reference to `receptionist(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:393: undefined reference to `pike(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:394: undefined reference to `jeff(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:397: undefined reference to `captain(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:398: undefined reference to `rodgers(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:399: undefined reference to `delaney(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:400: undefined reference to `generic_guard(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:401: undefined reference to `generic_guard(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:402: undefined reference to `janitor(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:403: undefined reference to `janitor(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:406: undefined reference to `lone_star_park(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:407: undefined reference to `mugger_park(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:408: undefined reference to `janitor(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:409: undefined reference to `gate_guard_park(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:410: undefined reference to `squirrel_park(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:411: undefined reference to `sick_ork(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:412: undefined reference to `adept_guard(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:413: undefined reference to `takehero_tsuyama(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:419: undefined reference to `bio_secretary(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:420: undefined reference to `harlten(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:421: undefined reference to `branson(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:422: undefined reference to `bio_guard(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:423: undefined reference to `worker(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:426: undefined reference to `saeder_guard(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:429: undefined reference to `generic_guard(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:430: undefined reference to `janitor(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:434: undefined reference to `receptionist(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:437: undefined reference to `doctor_scriptshaw(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:438: undefined reference to `huge_troll(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:441: undefined reference to `receptionist(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:445: undefined reference to `crime_mall_guard(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:448: undefined reference to `hacker(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:449: undefined reference to `fence(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:452: undefined reference to `receptionist(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:456: undefined reference to `yukiya_dahoto(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:459: undefined reference to `receptionist(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:462: undefined reference to `smelly(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:463: undefined reference to `receptionist(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:465: undefined reference to `smiths_bouncer(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:466: undefined reference to `matchsticks(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:467: undefined reference to `orkish_truckdriver(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:468: undefined reference to `receptionist(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:469: undefined reference to `painter(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:470: undefined reference to `multnomah_guard(char_data*, void*, int, char*)'
spec_assign.o: In function `assign_objects()':
/home/jrsteensen/sol_dev/src/spec_assign.cpp:504: undefined reference to `desktop(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:505: undefined reference to `desktop(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:506: undefined reference to `desktop(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:507: undefined reference to `desktop(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:508: undefined reference to `desktop(char_data*, void*, int, char*)'
spec_assign.o:/home/jrsteensen/sol_dev/src/spec_assign.cpp:509: more undefined references to `desktop(char_data*, void*, int, char*)' follow
spec_assign.o: In function `assign_objects()':
/home/jrsteensen/sol_dev/src/spec_assign.cpp:518: undefined reference to `clock(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:519: undefined reference to `bank(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:523: undefined reference to `bank(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:524: undefined reference to `anticoagulant(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:525: undefined reference to `anticoagulant(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:526: undefined reference to `vendtix(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:527: undefined reference to `clock(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:528: undefined reference to `clock(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:534: undefined reference to `vending_machine(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:535: undefined reference to `vending_machine(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:536: undefined reference to `hand_held_scanner(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:538: undefined reference to `bank(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:539: undefined reference to `clock(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:540: undefined reference to `clock(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:541: undefined reference to `clock(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:542: undefined reference to `bank(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:543: undefined reference to `bank(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:547: undefined reference to `toggled_invis(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:548: undefined reference to `desktop(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:549: undefined reference to `desktop(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:550: undefined reference to `desktop(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:551: undefined reference to `desktop(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:552: undefined reference to `desktop(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:553: undefined reference to `clock(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:554: undefined reference to `clock(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:555: undefined reference to `portable_gridguide(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:556: undefined reference to `portable_gridguide(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:557: undefined reference to `pocket_sec(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:558: undefined reference to `pocket_sec(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:559: undefined reference to `locker(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:562: undefined reference to `monowhip(char_data*, char_data*, obj_data*, int)'
spec_assign.o: In function `assign_rooms()':
/home/jrsteensen/sol_dev/src/spec_assign.cpp:593: undefined reference to `oceansounds(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:594: undefined reference to `oceansounds(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:595: undefined reference to `roots_office(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:599: undefined reference to `waterfall(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:602: undefined reference to `neophyte_entrance(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:603: undefined reference to `newbie_car(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:604: undefined reference to `auth_room(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:607: undefined reference to `simulate_bar_fight(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:616: undefined reference to `crime_mall_blockade(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:617: undefined reference to `crime_mall_blockade(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:620: undefined reference to `car_dealer(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:621: undefined reference to `car_dealer(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:622: undefined reference to `car_dealer(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:623: undefined reference to `car_dealer(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:624: undefined reference to `car_dealer(char_data*, void*, int, char*)'
spec_assign.o:/home/jrsteensen/sol_dev/src/spec_assign.cpp:625: more undefined references to `car_dealer(char_data*, void*, int, char*)' follow
spec_assign.o: In function `assign_rooms()':
/home/jrsteensen/sol_dev/src/spec_assign.cpp:630: undefined reference to `circulation_fan(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:637: undefined reference to `bouncy_castle(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:638: undefined reference to `rpe_room(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:640: undefined reference to `multnomah_gate(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:641: undefined reference to `multnomah_gate(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:643: undefined reference to `mageskill_hermes(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:644: undefined reference to `mageskill_moore(char_data*, void*, int, char*)'
/home/jrsteensen/sol_dev/src/spec_assign.cpp:648: undefined reference to `traffic(char_data*, void*, int, char*)'
collect2: ld returned 1 exit status
make: *** [../bin/awake.new] Error 1
Looks like a header wasn't included or a source file is missing. I guess I'd look for the prototypes for those functions in the headers and then make sure spec_assign.cpp is including them.
The functions are defined in the CPP file...
This is quickly approaching a point of beating my head against a wall. haha.