Jump to content
  • We need you!

    You must register to discover all the features of our community!

  • 0

Compiling and running source on FreeBSD 11.3 32 bit


3bd0
Go to solution Solved by Ikarus_,

Question

Posted (edited)

Hi,

 

I spent yesterday installing FeeBSD11 and required packages to compile and run metin 2 on. and I did manage to compile source successfully with any warnings. However when I run the server, the run script keep spitting out segmentation fault and doesn't start (the db seem to start). I have no clue why.

Here is the output from bt full

#0  0x28bc3a87 in vtable for __cxxabiv1::__si_class_type_info ()
   from /lib/libcxxrt.so.1
No symbol table info available.
#1  0x28818d48 in __dynamic_cast () from /usr/local/lib/gcc48/libstdc++.so.6
No symbol table info available.
#2  0x288b2440 in typeinfo for std::ctype_base ()
   from /usr/local/lib/gcc48/libstdc++.so.6
No symbol table info available.
#3  0x00000006 in ?? ()
No symbol table info available.
#4  0x288b2440 in typeinfo for std::ctype_base ()
   from /usr/local/lib/gcc48/libstdc++.so.6
No symbol table info available.
#5  0x288b257c in vtable for std::ios_base::failure ()
   from /usr/local/lib/gcc48/libstdc++.so.6
No symbol table info available.
#6  0x288bc5a0 in std::cin () from /usr/local/lib/gcc48/libstdc++.so.6
No symbol table info available.
#7  0xbfbfdd78 in ?? ()
No symbol table info available.
#8  0x288b5000 in ?? () from /usr/local/lib/gcc48/libstdc++.so.6
No symbol table info available.
#9  0x288bb49c in std::ctype<char>::id ()

I'm using the same gcc version (48), with the exact same make file on 9.2 32bit and it does compile and run successfully. Anyone have ideas?

 

Edit: This is my game make file as well

Spoiler
PLATFORM = $(shell file /bin/ls | cut -d' ' -f3 | cut -d'-' -f1)

GCC_VERSION = $(shell $(CC) --version 2>&1 | grep "(GCC)" | cut -d' ' -f3  | cut -d'.' -f1)
BSD_VERSION = $(shell uname -v 2>&1 | cut -d' ' -f2 | cut -d'.' -f1)
SVN_VERSION = 60006

CC = g++48

INCDIR =
LIBDIR =
BINDIR = ..
OBJDIR = OBJDIR
$(shell if [ ! -d $(OBJDIR) ]; then mkdir $(OBJDIR); fi)

# Standard Setting
LIBS = -pthread -lm -lmd
# Removed -fno-rtti 
CFLAGS = -w -g -Wall -O2 -m32 -std=c++11 -pipe -fexceptions -D_THREAD_SAFE -DNDEBUG -D__SVN_VERSION__=\"$(SVN_VERSION)\"

ifeq ($(GCC_VERSION), 4)
CFLAGS += -mtune=i686 -fstack-protector-all
else
CFLAGS += -march=i686
endif

# boost
INCDIR += -I../../../Extern/include/boost

# DevIL
INCDIR += -I../../libdevil
LIBDIR += -L../../libdevil
LIBS += -lIL -lpng -ltiff -lmng -llcms -ljpeg

# MySQL
ifeq ($(BSD_VERSION), 7)
INCDIR += -I../../libmysql/7.x-5.1.35
LIBDIR += -L../../libmysql/7.x-5.1.35
else
INCDIR += -I../../libmysql/5.x-5.1.35
LIBDIR += -L../../libmysql/5.x-5.1.35
endif

LIBS += -lmysqlclient -lz

# Miscellaneous external libraries
INCDIR += -I../../../Extern/include
LIBDIR += -L../../../Extern/lib
LIBS += -lcryptopp -lgtest

# HackShield
INCDIR += -I../../libhackshield/include
LIBDIR += -L../../libhackshield/lib
LIBS += -lanticpxsvr

# XTrap
INCDIR += -I../../libxtrap/include

# openssl
#INCDIR += -I/usr/include
LIBS += -lssl

# Project Library
INCDIR += -I../../liblua/include
INCDIR += -I/usr/local/include
INCDIR += -I../../libserverkey
LIBDIR += -L../../libthecore/lib -L../../libpoly -L../../libsql -L../../libgame/lib -L../../liblua/lib -L../../libserverkey
LIBDIR += -L/usr/local/lib
LIBS += -lthecore -lpoly -llua -llualib -lsql -lgame -lserverkey
USE_STACKTRACE = 0
ifeq ($(USE_STACKTRACE), 1)
LIBS += /usr/local/lib/libexecinfo.a
endif

TARGET  = $(BINDIR)/game_r$(P4_VERSION)_$(PLATFORM)

CFILE	= minilzo.c

CPPFILE = BattleArena.cpp FSM.cpp MarkConvert.cpp MarkImage.cpp MarkManager.cpp OXEvent.cpp TrafficProfiler.cpp ani.cpp\
		  arena.cpp banword.cpp battle.cpp blend_item.cpp block_country.cpp buffer_manager.cpp building.cpp castle.cpp\
		  char.cpp char_affect.cpp char_battle.cpp char_change_empire.cpp char_horse.cpp char_item.cpp char_manager.cpp\
		  char_quickslot.cpp char_resist.cpp char_skill.cpp char_state.cpp PetSystem.cpp cmd.cpp cmd_emotion.cpp cmd_general.cpp\
		  cmd_gm.cpp cmd_oxevent.cpp config.cpp constants.cpp crc32.cpp cube.cpp db.cpp desc.cpp\
		  desc_client.cpp desc_manager.cpp desc_p2p.cpp dev_log.cpp dungeon.cpp empire_text_convert.cpp entity.cpp\
		  entity_view.cpp event.cpp event_queue.cpp exchange.cpp file_loader.cpp fishing.cpp gm.cpp guild.cpp\
		  guild_manager.cpp guild_war.cpp horse_rider.cpp horsename_manager.cpp input.cpp input_auth.cpp input_db.cpp\
		  input_login.cpp input_main.cpp input_p2p.cpp input_teen.cpp input_udp.cpp ip_ban.cpp\
		  item.cpp item_addon.cpp item_attribute.cpp item_manager.cpp item_manager_idrange.cpp locale.cpp\
		  locale_service.cpp log.cpp login_data.cpp lzo_manager.cpp marriage.cpp matrix_card.cpp\
		  messenger_manager.cpp mining.cpp mob_manager.cpp monarch.cpp motion.cpp over9refine.cpp p2p.cpp packet_info.cpp\
		  party.cpp passpod.cpp pcbang.cpp polymorph.cpp priv_manager.cpp pvp.cpp\
		  questevent.cpp questlua.cpp questlua_affect.cpp questlua_arena.cpp questlua_ba.cpp questlua_building.cpp\
		  questlua_danceevent.cpp questlua_dungeon.cpp questlua_forked.cpp questlua_game.cpp questlua_global.cpp\
		  questlua_guild.cpp questlua_horse.cpp questlua_pet.cpp questlua_item.cpp questlua_marriage.cpp questlua_mgmt.cpp\
		  questlua_monarch.cpp questlua_npc.cpp questlua_oxevent.cpp questlua_party.cpp questlua_pc.cpp\
		  questlua_quest.cpp questlua_target.cpp questmanager.cpp questnpc.cpp questpc.cpp\
		  refine.cpp regen.cpp safebox.cpp sectree.cpp sectree_manager.cpp sequence.cpp shop.cpp\
		  skill.cpp start_position.cpp target.cpp text_file_loader.cpp trigger.cpp utils.cpp vector.cpp war_map.cpp\
		  wedding.cpp xmas_event.cpp version.cpp panama.cpp threeway_war.cpp map_location.cpp auth_brazil.cpp\
		  BlueDragon.cpp BlueDragon_Binder.cpp DragonLair.cpp questlua_dragonlair.cpp\
		  HackShield.cpp HackShield_Impl.cpp char_hackshield.cpp skill_power.cpp affect.cpp\
		  SpeedServer.cpp questlua_speedserver.cpp XTrapManager.cpp\
		  auction_manager.cpp FileMonitor_FreeBSD.cpp ClientPackageCryptInfo.cpp cipher.cpp\
		  buff_on_attributes.cpp dragon_soul_table.cpp DragonSoul.cpp\
		  group_text_parse_tree.cpp char_dragonsoul.cpp questlua_dragonsoul.cpp\
		  shop_manager.cpp shopEx.cpp item_manager_read_tables.cpp 


COBJS	= $(CFILE:%.c=$(OBJDIR)/%.o)
CPPOBJS	= $(CPPFILE:%.cpp=$(OBJDIR)/%.o)

MAINOBJ = $(OBJDIR)/main.o
MAINCPP = main.cpp

TESTOBJ = $(OBJDIR)/test.o
TESTCPP = test.cpp
TEST_TARGET = $(BINDIR)/test

default: $(TARGET)
	@strip $(TARGET)

$(OBJDIR)/minilzo.o: minilzo.c
	@$(CC) $(CFLAGS) $(INCDIR) -c $< -o [email protected]
	@echo compile $<

$(OBJDIR)/version.o: version.cpp
	@$(CC) $(CFLAGS) -D__USER__=\"$(USER)\" -D__HOSTNAME__=\"$(HOSTNAME)\" -D__PWD__=\"$(PWD)\" -D__P4_VERSION__=\"$(P4_VERSION)\" -c $< -o [email protected]
	@echo compile $<

$(OBJDIR)/%.o: %.cpp
	@echo compile $<
	@$(CC) $(CFLAGS) $(INCDIR) -c $< -o [email protected]

limit_time:
	@echo update limit time
	@python update_limit_time.py

$(TARGET): $(CPPOBJS) $(COBJS) $(MAINOBJ)
	@echo linking $(TARGET)....
	@$(CC) $(CFLAGS) $(LIBDIR) $(COBJS) $(CPPOBJS) $(MAINOBJ) $(LIBS) -o $(TARGET)

$(TEST_TARGET): $(TESTCPP) $(CPPOBJS) $(COBJS) $(TESTOBJ)
	@echo linking $(TEST_TARGET)
	@$(CC) $(CFLAGS) $(LIBDIR) $(COBJS) $(CPPOBJS) $(TESTOBJ) $(LIBS) -o ../test

clean:
	@rm -f $(COBJS) $(CPPOBJS)
	@rm -f $(BINDIR)/game_r* $(BINDIR)/conv

tag:
	ctags *.cpp *.h *.c

dep:
	makedepend -f Depend $(INCDIR) -I/usr/include/c++/3.3 -I/usr/include/c++/4.2 -p$(OBJDIR)/ $(CPPFILE) $(CFILE) $(MAINCPP) $(TESTCPP) 2> /dev/null > Depend

sinclude Depend

 

 

Edited by 3bd0 (see edit history)
Link to post

15 answers to this question

Recommended Posts

  • 0
  • VIP

Can you please go to the path where your compiled game file is and do "ldd game"?. It will tell you what packages are neeeded in order to actually start up the server, it will aswell tell you if you are missing them.

  • Love 1
Link to post
  • 0
57 minutes ago, witcher said:

Can you please go to the path where your compiled game file is and do "ldd game"?. It will tell you what packages are neeeded in order to actually start up the server, it will aswell tell you if you are missing them.

This is the list of the command produced and I checked every single one of them, they all exist.

 libmd.so.6 => /lib/libmd.so.6 (0x28471000)
        libIL.so.1 => /usr/local/lib/libIL.so.1 (0x2848c000)
        libpng16.so.16 => /usr/local/lib/libpng16.so.16 (0x285a9000)
        libtiff.so.5 => /usr/local/lib/libtiff.so.5 (0x285d9000)
        libmng.so.1 => /usr/local/lib/libmng.so.1 (0x28647000)
        liblcms.so.1 => /usr/local/lib/liblcms.so.1 (0x286a1000)
        libjpeg.so.8 => /usr/local/lib/libjpeg.so.8 (0x286d8000)
        libz.so.6 => /lib/libz.so.6 (0x28761000)
        libssl.so.8 => /usr/lib/libssl.so.8 (0x28777000)
        libstdc++.so.6 => /usr/local/lib/gcc48/libstdc++.so.6 (0x287d1000)
        libm.so.5 => /lib/libm.so.5 (0x288bd000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x288ea000)
        libthr.so.3 => /lib/libthr.so.3 (0x288fb000)
        libc.so.7 => /lib/libc.so.7 (0x2891f000)
        libnvtt.so => /usr/local/lib/libnvtt.so (0x28a7d000)
        libjasper.so.4 => /usr/local/lib/libjasper.so.4 (0x28a93000)
        libc++.so.1 => /usr/lib/libc++.so.1 (0x28af0000)
        libcxxrt.so.1 => /lib/libcxxrt.so.1 (0x28bae000)
        liblzma.so.5 => /usr/lib/liblzma.so.5 (0x28bc8000)
        libjbig.so.2 => /usr/local/lib/libjbig.so.2 (0x28bec000)
        libcrypto.so.8 => /lib/libcrypto.so.8 (0x28bf8000)
        libnvimage.so => /usr/local/lib/libnvimage.so (0x28d89000)
        libnvmath.so => /usr/local/lib/libnvmath.so (0x28dab000)
        libnvcore.so => /usr/local/lib/libnvcore.so (0x28db0000)
        libImath-2_4.so.24 => /usr/local/lib/libImath-2_4.so.24 (0x28db7000)
        libIlmImf-2_4.so.24 => /usr/local/lib/libIlmImf-2_4.so.24 (0x28dc8000)
        libIex-2_4.so.24 => /usr/local/lib/libIex-2_4.so.24 (0x290a5000)
        libHalf-2_4.so.24 => /usr/local/lib/libHalf-2_4.so.24 (0x290fd000)
        libIlmThread-2_4.so.24 => /usr/local/lib/libIlmThread-2_4.so.24 (0x29140000)
        libIexMath-2_4.so.24 => /usr/local/lib/libIexMath-2_4.so.24 (0x29147000)
40 minutes ago, Sherer said:

Actually how did you manage to use gcc48 on FreeBSD 11.3? It's totally outdated. Consider updating it.

gcc48 is included in the ports. I am planning to update it but sine this is the version I used on 9.2, wanted to make it work with it first then update from there.

Link to post
  • 0

I think you still use code under "tr1" namespace and this causes crash. Additionally do not use old libraries from extern. You dont need anything from extern to do game server working.

libstdc++.so.6, libcxxrt.so.1 libc++.so.1 mixing of these libraries is not coool

  • Love 1
Link to post
  • 0
Posted (edited)
1 hour ago, IceShiva said:

I think you still use code under "tr1" namespace and this causes crash. Additionally do not use old libraries from extern. You dont need anything from extern to do game server working.

libstdc++.so.6, libcxxrt.so.1 libc++.so.1 mixing of these libraries is not coool

I did update all packages and deleted everything in Extern except include/boost. The only thing I am not using the latest version for is cryptopp, I am suing cryptopp700 (I built it myself). But still getting a segmentation fault. Output of bt full is the following.

Spoiler
#0  0x28f20a86 in vtable for __cxxabiv1::__si_class_type_info () from /lib/libcxxrt.so.1
No symbol table info available.
#1  0x28a46024 in ?? () from /usr/lib/libstdc++.so.6
No symbol table info available.
#2  0x28ae0440 in ?? () from /usr/lib/libstdc++.so.6
No symbol table info available.
#3  0x00000000 in ?? ()
No symbol table info available.

 

I don't know about the tr1 namespace honestly, do you where that was used and how to fix it?

 

Edit: This is the makefile now after edits

https://pastebin.com/EpeHUijk

Edited by 3bd0 (see edit history)
Link to post
  • 0

I removed all optimisation flags & removed the hackshield stuff as I don't have the source code for that to rebuild the lib. I updated gdb version to 9.1 as well. Now the game error out with a bus error. This is the output of bt full.

#0  0x29073a85 in vtable for __cxxabiv1::__si_class_type_info ()
   from /lib/libcxxrt.so.1
No symbol table info available.
#1  0x28c33440 in ?? () from /usr/lib/libstdc++.so.6
No symbol table info available.
Backtrace stopped: previous frame inner to this frame (corrupt stack?)

Does anyone have any idea what is going on?

Link to post
  • 0

try by adding -static here like this:
 

CFLAGS = -w -g -Wall -O2 -m32 -std=c++11 -static -pipe -fexceptions -D_THREAD_SAFE -DNDEBUG -D__SVN_VERSION__=\"$(SVN_VERSION)\"

 

 

i hope you are not running the game binary on a older version of freebsd (eg. compiling on 11.3 and running on 10.3)

compiler OS version must be <= live-server OS version

  • Love 1

My youtube channel  on which you can see my works here

Link to post
  • 0
1 hour ago, Ikarus_ said:

try by adding -static here like this:
 

CFLAGS = -w -g -Wall -O2 -m32 -std=c++11 -static -pipe -fexceptions -D_THREAD_SAFE -DNDEBUG -D__SVN_VERSION__=\"$(SVN_VERSION)\"

CFLAGS = -w -g -Wall -O2 -m32 -std=c++11 -static -pipe -fexceptions -D_THREAD_SAFE -DNDEBUG -D__SVN_VERSION__=\"$(SVN_VERSION)\"

 

 

i hope you are not running the game binary on a older version of freebsd (eg. compiling on 11.3 and running on 10.3)

compiler OS version must be <= live-server OS version

I running and compiling it on the same machine. I tried adding the static flag, but the build failed as it couldn't find gtest library. I checked and I do have the shared lib (.so) but not the static one (.a). Tried googlin on how to build it, but couldn't find anything helpful.

Link to post
  • 0

This worked! I copied all the devil libs from the 9.2 machine and compiled it and its working now perfectly! Will try to upgrade it later.

 

I am guessing the static flag makes the linker pack every library needed into the binary, which makes it work on every machine even if that library is not installed, am I right?

Is there any disadvantages to using the static flag vs dynamic linking?

Link to post
  • 0
Posted (edited)
3 hours ago, 3bd0 said:

This worked! I copied all the devil libs from the 9.2 machine and compiled it and its working now perfectly! Will try to upgrade it later.

 

I am guessing the static flag makes the linker pack every library needed into the binary, which makes it work on every machine even if that library is not installed, am I right?

Is there any disadvantages to using the static flag vs dynamic linking?

Yes, the static linking links the whole code.

Sometimes static linking could conflict when the machines are not using the same OS but very rarely.

 

Why did moderator removed my message with the libs list? lol
btw good luck with ur work bye bye

Edited by Ikarus_ (see edit history)

My youtube channel  on which you can see my works here

Link to post
  • 0
28 minutes ago, Ikarus_ said:

Yes, the static linking links the whole code.

Sometimes static linking could conflict when the machines are not using the same OS but very rarely.

 

Why did moderator removed my message with the libs list? lol
btw good luck with ur work bye bye

It wasn't removed. It moved to the top of the thread because I marked it as best answer.

Link to post
Guest
This topic is now closed to further replies.


×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.