I've been trying to get the MySQL connector working I've installed both the connector and the mysql client library but I am still getting this error:

obj/Database.obj: In function `Database::connect()':

/home/xeross/alpine/src/server/Database.cpp:13: undefined reference to `get_driver_instance'

collect2: ld returned 1 exit status

make[2]: *** [alpine-server] Error 1

make[1]: *** [.build-conf] Error 2

make: *** [.build-impl] Error 2

Using Ubuntu 10.04

And my makefile is as follows:

INCLUDES = -I./src -I./src/shared

OUTDIR = bin

INTDIR = obj

OPTIONS = -ggdb -g3 -Wall -O0

alpine-server : Shared.a AsyncServerSocket.obj PlayerHandler.obj PacketHandler.obj Session.obj User.obj Database.obj init

g++ $(INCLUDES) $(OPTIONS) -static \

-pthread \

-lmysqlcppconn-static \

-o $(OUTDIR)/alpine-server src/server/main.cpp \

$(INTDIR)/AsyncServerSocket.obj \

$(INTDIR)/PacketHandler.obj \

$(INTDIR)/Database.obj \

$(INTDIR)/PlayerHandler.obj \

$(INTDIR)/Session.obj \

$(INTDIR)/User.obj \

$(INTDIR)/Shared.a \

-lboost_system \

-lmysqlclient

AsyncServerSocket.obj : src/server/AsyncServerSocket.cpp init

g++ -c $(INCLUDES) $(OPTIONS) -o $(INTDIR)/AsyncServerSocket.obj src/server/AsyncServerSocket.cpp

PlayerHandler.obj : src/server/PlayerHandler.cpp init

g++ -c $(INCLUDES) $(OPTIONS) -o $(INTDIR)/PlayerHandler.obj src/server/PlayerHandler.cpp

PacketHandler.obj : src/server/PacketHandler.cpp init

g++ -c $(INCLUDES) $(OPTIONS) -o $(INTDIR)/PacketHandler.obj src/server/PacketHandler.cpp

Session.obj : src/server/Session.cpp init

g++ -c $(INCLUDES) $(OPTIONS) -o $(INTDIR)/Session.obj src/server/Session.cpp

User.obj : src/server/User.cpp init

g++ -c $(INCLUDES) $(OPTIONS) -o $(INTDIR)/User.obj src/server/User.cpp

Database.obj : src/server/Database.cpp init

g++ -c $(INCLUDES) $(OPTIONS) -o $(INTDIR)/Database.obj src/server/Database.cpp

# Shared.a

Shared.a : Packet.obj Flags.obj AsyncSocket.obj Log.obj init

ar -cvq $(INTDIR)/Shared.a \

$(INTDIR)/Packet.obj \

$(INTDIR)/Flags.obj \

$(INTDIR)/AsyncSocket.obj \

$(INTDIR)/Log.obj

ranlib $(INTDIR)/Shared.a

Packet.obj : src/shared/packet.cpp init

g++ -c $(INCLUDES) $(OPTIONS) -o $(INTDIR)/Packet.obj src/shared/packet.cpp

Flags.obj : src/shared/Flags.cpp init

g++ -c $(INCLUDES) $(OPTIONS) -o $(INTDIR)/Flags.obj src/shared/Flags.cpp

AsyncSocket.obj : src/shared/AsyncSocket.cpp init

g++ -c $(INCLUDES) $(OPTIONS) -o $(INTDIR)/AsyncSocket.obj src/shared/AsyncSocket.cpp

Log.obj : src/shared/Log.cpp init

g++ -c $(INCLUDES) $(OPTIONS) -o $(INTDIR)/Log.obj src/shared/Log.cpp

init:

mkdir -p bin obj

clean:

rm -f $(INTDIR)/*.obj $(INTDIR)/*.a

The Code

// Excerpt from .hpp file

#include

#include

#include

#include

// End excerpt

void Database::connect()

{

std::stringstream connString;

connString << "tcp://";

connString << m_host;

connString << ":";

connString << m_port;

m_driver = get_driver_instance(); // This guy is being a *****

m_conn = m_driver->connect(connString.str(), m_user, m_password);

m_conn->setSchema(m_database);

}

What can I do to fix this ?

解决方案

Finally I could successfully compile a program with C++ connector in Ubuntu 10.10.

Initially I faced the same problem with "undefined reference to `get_driver_instance' " to solve this I declare my driver instance variable of MySQL_Driver type. For ready reference this type is defined in mysql_driver.h file. Here is the code snippet I used in my program.

sql::mysql::MySQL_Driver *driver;

try {

driver = sql::mysql::get_driver_instance();

}

and I compiled the program with -l mysqlcppconn linker option

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐