views:

33

answers:

3

Hey,

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 <cppconn/driver.h>
#include <cppconn/connection.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
// 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 ?

A: 

The code would be more helpful than the make file but try adding using namespace sql; to the top of Database.cpp.

// Excerpt from .hpp file
#include <cppconn/driver.h>
#include <cppconn/connection.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>

using namespace sql;     // <---- add here
dgnorton
src/server/Database.hpp:13: error: ‘mysql’ is not a namespace-name, Will put up code in a bit
Xeross
I said "top" but it needs to go below the includes.
dgnorton
Yeah that's where I put it but it gives that error
Xeross
A: 

You'll need to add -lmysqlcppconn-static after the object files that uses stuff inside that library.

nos
As in the compilation of that specific .obj or at the bottom of the lib list of the final compile ?
Xeross
Tried adding it to both the main compile and the object (-static and -lmysqlcppconn-static)
Xeross
A: 

I have switched to use SOCI which works like a charm now, so this can be closed.

Xeross