Hi!
I'm trying to compile a Mystic Spirit distribution under Debian stable, but I get this error from the linker:
Here is my makefile:
How can I fix this linker error?
I'm trying to compile a Mystic Spirit distribution under Debian stable, but I get this error from the linker:
Code:
obj/weapons.o: In function `Weapons::loadDefaults()':
weapons.cpp:(.text+0x1730): undefined reference to `Array<ItemType*>::getElement(unsigned int) const'
collect2: ld returned 1 exit status
make: *** [forgottenserver] Error 1
Here is my makefile:
Code:
# Makefile for Linux (Ubuntu, Debian), Windows (mingw, probably supports MSVC too)
TFS = forgottenserver
INCLUDEDIRS = -I"." -I"/usr/include/libxml2" -I"/usr/include/lua5.1" -I"/usr/include/mysql"
LIBDIRS =
FLAGS = -D_THREAD_SAFE -D_REENTRANT -D__NO_HOMEDIR_CONF__ -D__ENABLE_SERVER_DIAGNOSTIC__
#CXXFLAGS = $(INCLUDEDIRS) $(FLAGS) -Werror -Wall -O2
CXXFLAGS = $(INCLUDEDIRS) $(FLAGS) -Wall -O2
CXX = g++
#Those are common libraries
LIBS = -lxml2 -lpthread -llua5.1 -lgmp
#For windows:
# mingw32-make
#For Linux:
# make
ifndef MYSQL
MYSQL = 0
endif
ifndef SQLITE
SQLITE = 1
endif
ifeq ($(MYSQL),1)
ifdef WIN32
LIBS += -lmysql
else
LIBS += -lmysqlclient
endif
FLAGS += -D__USE_MYSQL__
MYSQL_SOURCE = databasemysql.cpp
endif
ifeq ($(SQLITE),1)
LIBS += -lsqlite3
FLAGS += -D__USE_SQLITE__
SQLITE_SOURCE = databasesqlite.cpp
endif
#mingw32-make WIN32=1 LATEST_MINGW=1
ifdef WIN32
ifdef LATEST_MINGW
#Causes notices when compiling with latest MinGW without these flags.
FLAGS += -enable-stdcall-fixup -enable-auto-import -enable-runtime-pseudo-reloc
LIBS += -lboost_system-mgw45-1_45 -lboost_thread-mgw45-mt-1_45 -lboost_regex-mgw45-1_45
else
LIBS += -lboost_system -lboost_thread -lboost_regex
endif
LIBS += -lws2_32 -lwsock32
FLAGS += -mwindows
else
LIBS += -lboost_thread -lboost_system -lboost_regex -lpthread -ldl
endif
#mingw32-make DEBUG=1
#make DEBUG=1
ifdef DEBUG
CXXFLAGS += -g
#TODO: add all flags
FLAGS += -D__DEBUG__ -D__DEBUG_PLAYERS__
endif
LDFLAGS = $(LIBDIRS) $(LIBS)
ifdef WIN32
DEL = del
endif
# Removed: admin.cpp databasemanager.cpp ioban.cpp quests.cpp
CXXSOURCES = $(MYSQL_SOURCE) $(SQLITE_SOURCE) \
account.cpp depot.cpp map.cpp scheduler.cpp \
actions.cpp exception.cpp md5.cpp scriptmanager.cpp \
allocator.cpp fileloader.cpp monster.cpp server.cpp \
ban.cpp game.cpp monsters.cpp sha1.cpp \
baseevents.cpp gameservers.cpp movement.cpp spawn.cpp \
beds.cpp globalevent.cpp networkmessage.cpp spells.cpp \
chat.cpp gui.cpp npc.cpp status.cpp \
combat.cpp house.cpp otserv.cpp talkaction.cpp \
commands.cpp housetile.cpp outfit.cpp tasks.cpp \
condition.cpp inputbox.cpp outputmessage.cpp teleport.cpp \
configmanager.cpp ioguild.cpp party.cpp textlogger.cpp \
connection.cpp iologindata.cpp playerbox.cpp thing.cpp \
container.cpp iomap.cpp player.cpp tile.cpp \
creature.cpp iomapserialize.cpp position.cpp tools.cpp \
creatureevent.cpp item.cpp protocol76.cpp trashholder.cpp \
cylinder.cpp items.cpp protocol.cpp waitlist.cpp \
database.cpp logger.cpp protocollogin.cpp weapons.cpp \
luascript.cpp raids.cpp vocation.cpp mailbox.cpp \
rsa.cpp
OBJDIR = obj
CXXOBJECTS = $(CXXSOURCES:%.cpp=$(OBJDIR)/%.o)
all: $(TFS)
clean:
ifdef WIN32
-$(DEL) $(CXXOBJECTS) $(TFS)
else
$(RM) $(CXXOBJECTS) $(TFS)
endif
$(TFS): $(CXXOBJECTS)
$(CXX) $(CXXFLAGS) -o $@ $(CXXOBJECTS) $(LDFLAGS)
$(OBJDIR)/%.o: %.cpp
$(CXX) -c $(CXXFLAGS) -o $@ $<
How can I fix this linker error?
Last edited: