PDA

View Full Version : Compiling 0.5.0 Under Linux


predominant
08-13-2003, 05:47 PM
Hi all,

I'm having a few issues with the compilation of 0.5.0 under Redhat Linux.
I understand that redHat may have issues with the RPM install of mysql, but we'll see of that is actually the problem.

I;ve modified the EMuShareMem/makefile to read:

# LINKOPTS=-L. -lstdc++ -lm -lz `mysql_config --libs`
LINKOPTS=-L. -lstdc++ -lm -lz -L/usr/lib/mysql

( Note the first line is the original, and the second line is my version )

This compiles EMuShareMem correctly, as far as I can see. I end up with 'libEMuShareMem.so' in that directory.

onto 'world'.

cd ../world
$ make
gcc -c -Wall -Wuninitialized -Wwrite-strings -Wcast-qual -Wbad-function-cast -Wstrict-prototypes -Wnested-externs -Wcomment -Wcast-align -Winline -Wno-deprecated -g -march=i686 -O -pthread -pipe -DFX -D_GNU_SOURCE -DINVERSEXY -DWORLD -DDEBUG=5 -DSHAREMEM -DCATCH_CRASH -DNO_PIDLOG -I/usr/include/mysql -I/usr/mysql/include ../common/eqtime.cpp -o ../common/eqtime.o
In file included from ../common/eqtime.h:5,
from ../common/eqtime.cpp:20:
../common/database.h:30:19: mysql.h: No such file or directory
In file included from ../common/database.h:32,
from ../common/eqtime.h:5,
from ../common/eqtime.cpp:20:
../common/dbcore.h:8:19: mysql.h: No such file or directory
In file included from ../common/database.h:32,
from ../common/eqtime.h:5,
from ../common/eqtime.cpp:20:
../common/dbcore.h:24: type specifier omitted for parameter `MYSQL_RES'
../common/dbcore.h:24: parse error before `*' token
../common/dbcore.h:32: 'MYSQL' is used as a type, but is not defined as a type.
../common/dbcore.h:178: type specifier omitted for parameter `MYSQL_RES'
../common/dbcore.h:178: parse error before `*' token
../common/dbcore.h:199: syntax error before `*' token
In file included from ../common/eqtime.h:5,
from ../common/eqtime.cpp:20:
../common/database.h:226: `MYSQL_RES' was not declared in this scope
../common/database.h:226: `result' was not declared in this scope
../common/database.h:226: parse error before `*' token
../common/database.h:228: `MYSQL_RES' was not declared in this scope
../common/database.h:228: `result' was not declared in this scope
../common/database.h:228: parse error before `*' token
../common/database.h:269: `MYSQL_RES' was not declared in this scope
../common/database.h:269: `result' was not declared in this scope
../common/database.h:269: invalid data member initialization
../common/database.h:269: (use `=' to initialize static data members)
../common/database.h:310: `MYSQL_RES' was not declared in this scope
../common/database.h:310: `result' was not declared in this scope
../common/database.h:310: parse error before `*' token
make: *** [../common/eqtime.o] Error 1


I assume this is a mysql fault. Are there command-line parameteres that I can supply, or some weel-known modifications to the makefile that I can make?
Also, I dont believe I *have* mysql.h - Where do I get it, and where do I put it?

onto 'zone'

cd ../zone
$ make
gcc -c -Wall -Wuninitialized -Wwrite-strings -Wcast-qual -Wbad-function-cast -Wstrict-prototypes -Wno-deprecated -Wnested-externs -Wcomment -Wcast-align -O -ggdb -march=i686 -pthread -pipe -D_GNU_SOURCE -DINVERSEXY -DFX -DZONE -DDEBUG=5 -DCATCH_CRASH -DNO_PIDLOG -DSHAREMEM -DSPELL_EFFECT_SPAM -I/usr/local/mysql/include ../common/packet_dump_file.cpp -o ../common/packet_dump_file.o
gcc -c -Wall -Wuninitialized -Wwrite-strings -Wcast-qual -Wbad-function-cast -Wstrict-prototypes -Wno-deprecated -Wnested-externs -Wcomment -Wcast-align -O -ggdb -march=i686 -pthread -pipe -D_GNU_SOURCE -DINVERSEXY -DFX -DZONE -DDEBUG=5 -DCATCH_CRASH -DNO_PIDLOG -DSHAREMEM -DSPELL_EFFECT_SPAM -I/usr/local/mysql/include zone.cpp -o
zone.o
In file included from zone.h:26,
from zone.cpp:38:
../common/database.h:30:19: mysql.h: No such file or directory
In file included from ../common/database.h:32,
from zone.h:26,
from zone.cpp:38:
../common/dbcore.h:8:19: mysql.h: No such file or directory
In file included from ../common/database.h:32,
from zone.h:26,
from zone.cpp:38:
../common/dbcore.h:24: type specifier omitted for parameter `MYSQL_RES'
../common/dbcore.h:24: parse error before `*' token
../common/dbcore.h:32: 'MYSQL' is used as a type, but is not defined as a type.
../common/dbcore.h:178: type specifier omitted for parameter `MYSQL_RES'
../common/dbcore.h:178: parse error before `*' token
../common/dbcore.h:199: syntax error before `*' token
In file included from zone.h:26,
from zone.cpp:38:
../common/database.h:226: `MYSQL_RES' was not declared in this scope
../common/database.h:226: `result' was not declared in this scope
../common/database.h:226: parse error before `*' token
../common/database.h:228: `MYSQL_RES' was not declared in this scope
../common/database.h:228: `result' was not declared in this scope
../common/database.h:228: parse error before `*' token
../common/database.h:269: `MYSQL_RES' was not declared in this scope
../common/database.h:269: `result' was not declared in this scope
../common/database.h:269: invalid data member initialization
../common/database.h:269: (use `=' to initialize static data members)
../common/database.h:310: `MYSQL_RES' was not declared in this scope
../common/database.h:310: `result' was not declared in this scope
../common/database.h:310: parse error before `*' token
In file included from object.h:23,
from zone.cpp:46:
../common/eq_opcodes.h:243:1: warning: "OP_WearChange" redefined
../common/eq_opcodes.h:23:1: warning: this is the location of the previous definition
zone.cpp:70: type specifier omitted for parameter `MYSQL_RES'
zone.cpp:70: parse error before `*' token
zone.cpp: In static member function `static bool Zone::Bootup(unsigned int,
bool)':
zone.cpp:103: `MYSQL_ERRMSG_SIZE' undeclared (first use this function)
zone.cpp:103: (Each undeclared identifier is reported only once for each
function it appears in.)
zone.cpp:100: warning: unused variable `PlayerProfile_Struct*pp'
zone.cpp:101: warning: unused variable `int char_num'
zone.cpp:102: warning: unused variable `long unsigned int*lengths'
zone.cpp: In member function `void Zone::LoadZoneDoors(const char*)':
zone.cpp:219: warning: comparison is always false due to limited range of data
type
zone.cpp: In member function `bool
Database::LoadStaticZonePoints(LinkedList<ZonePoin t*>*, const char*)':
zone.cpp:739: `MYSQL_RES' undeclared (first use this function)
zone.cpp:739: `result' undeclared (first use this function)
zone.cpp:740: `MYSQL_ROW' undeclared (first use this function)
zone.cpp:740: parse error before `;' token
zone.cpp:743: `errbuf' undeclared (first use this function)
zone.cpp:746: `row' undeclared (first use this function)
zone.cpp:746: `mysql_fetch_row' undeclared (first use this function)
zone.cpp:764: `mysql_free_result' undeclared (first use this function)
zone.cpp: In member function `bool Database::PopulateZoneLists(const char*,
LinkedList<ZonePoint*>*, SpawnGroupList*)':
zone.cpp:781: parse error before `;' token
zone.cpp: In member function `bool Database::PopulateZoneSpawnList(const char*,
LinkedList<Spawn2*>&, unsigned int)':
zone.cpp:831: parse error before `;' token
zone.cpp: In member function `sint8 Database::LoadZoneState(const char*,
LinkedList<Spawn2*>&)':
zone.cpp:1012: parse error before `;' token
zone.cpp:1030: `mysql_num_rows' undeclared (first use this function)
zone.cpp:1034: `mysql_fetch_lengths' undeclared (first use this function)
zone.cpp: At global scope:
zone.cpp:1189: type specifier omitted for parameter `MYSQL_RES'
zone.cpp:1189: parse error before `*' token
zone.cpp: In function `void CleanupLoadZoneState(...)':
zone.cpp:1190: `spawn2_dump' undeclared (first use this function)
zone.cpp:1191: `spawn2_loaded' undeclared (first use this function)
zone.cpp:1192: `gmspawntype_dump' undeclared (first use this function)
zone.cpp:1193: `npc_dump' undeclared (first use this function)
zone.cpp:1194: `npc_loaded' undeclared (first use this function)
zone.cpp:1195: `npcloot_dump' undeclared (first use this function)
zone.cpp: In member function `Spawn2*
Database::LoadSpawn2(LinkedList<Spawn2*>&, unsigned int, unsigned int)':
zone.cpp:1206: parse error before `;' token
zone.cpp: In member function `bool
Database::GetDecayTimes(npcDecayTimes_Struct*)':
zone.cpp:1283: parse error before `;' token
zone.cpp: In member function `bool Database::LoadZonePoints(const char*,
uint8**, int32*)':
zone.cpp:1376: parse error before `;' token
make: *** [zone.o] Error 1


Again, I feel this is a mysql invoked issue, but I dont know how to resolve it.
Any thoughts would be great. Thanks :)

Cheers,
Predominant

Trumpcard
08-14-2003, 12:45 AM
Do you have the mysql-dev rpm installed?

If not, thats your problem....

You probably dont have the mysql headers...

predominant
08-14-2003, 01:54 AM
Firstly, I'd like to thankyou for the helpful and speedy reply. I know you guys don't have to help me with this, but the fact that you put some effort into helping us guys out here, really makes us appreciate your hard work and effort.
... of course, we appreciate it anyway :)

Now, Downloading and installing mysql-devel did make some changes to the output generated by the make.

I've recompiled the EMuShareMem, which worked fine again.
Note: the following is ludicrusly long... (apologies)


cd ../world
Output: http://www.cs.newcastle.edu.au/SECS/world_compile.txt



cd ../zone
Output: http://www.cs.newcastle.edu.au/SECS/zone_compile.txt


Again, any help would be appreciated... Thanks again :)

Cheers,
Predominant

Deawin
08-14-2003, 02:35 AM
For the zone thingy, you might need to adjust ./zone/makefile to reflect the proper paths to the mysql headers and libs.

The world stuff looks rather ugly. Do you have a working development environment set up?


Regards,
Markus

Trumpcard
08-14-2003, 03:38 AM
Theres some namespace clashes in there... No idea what version of gcc, but when you see the undeclared reference to std::cout , try to add a using namespace <std> (think thats the syntax) to define the namespace.

Also, your missing the paths to the mysql dev headers still in world.. Make sure they are in your standard include path.. (rebooting will help also)

Bigpull
08-14-2003, 03:43 AM
world is bad ldflags, zone is bad cflags, re checkout the makefiles and reedit the mysql path preferably with an editor that does makefile syntax highlighting you probably just have some bad whitespace

predominant
08-14-2003, 11:31 AM
Thanks again for the prompt reply. I'll try these when I get home. Could I get some more clarification regarding these instructions from Trumpcard?


Theres some namespace clashes in there... No idea what version of gcc, but when you see the undeclared reference to std::cout , try to add a using namespace <std> (think thats the syntax) to define the namespace.

Cheers, :)
Predominant

edit:
gcc is version 3.2.2

Bigpull
08-14-2003, 12:08 PM
They're not needed, that error message is showing up because it's not linking to the stdc++ lib, among others

Trumpcard
08-15-2003, 01:46 AM
Yep, he's on the money...

predominant
08-15-2003, 03:35 PM
One last question people :)

I seem to have compiled the thing successfully. Although, I want to check that I modified the files correctly...

It reported that it could not find 'errmsg.h', so I assumed it meant the mysql errmsg.h ... Or was this assumption incorrect?

Below is the modification:

//#include <errmsg.h>
#include "/usr/include/mysql/errmsg.h"


Cheers, and thanks again.

Predominant