Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting Up Code::Blocks with MySql Connector on Windows 7 64bit

Variations of this question has been asked many times before, but I've searched through everything I can find on the web and still don't have a valid answer, or at least one that works.

I am trying to setup Code::Blocks to use MySql Connector in order to get the tutorial posted here to run. I have done everything to the best of my knowledge but still get an 'undefined reference' error on compile. I'm fairly certain it is a linking error.

Here is the error I get on compile:

obj\Release\main.o:main.cpp:(.text.startup+0x15e)
undefined reference to _imp__get_driver_instance' error: ld returned 1 exit status

Here is my setup:

OS: Windows 7 64bit
IDE: Code::Blocks 16.01

Settings->Compiler->Search Directories->Compiler:

C:\Program Files\MySQL\MySQL Connector C++ 1.1.7\include  
C:\Program Files\MySQL\MySQL Connector C++ 1.1.7\include\cppconn  
C:\local\boost_1_61_0  

Settings->Compiler->Search Directories->Linker:

C:\Program Files\MySQL\MySQL Connector C++ 1.1.7\lib\opt  

Settings->Compiler->Linker Settings->Link Libraries:

C:\Program Files\MySQL\MySQL Connector C++ 1.1.7\lib\opt\mysqlcppconn.lib  
C:\Program Files\MySQL\MySQL Connector C++ 1.1.7\lib\opt\mysqlcppconn-static.lib 

Like I said, there are lots of questions around the web about this particular error, but I haven't found anything with a solution for my setup. I admit I'm a little rusty on linking libraries but I swear I've tried every possible variation I could think up without success.

Here is the code:

/* Standard C++ headers */
#include <iostream>
#include <sstream>
#include <memory>
#include <string>
#include <stdexcept>
#include <stdlib.h>

/* MySQL Connector/C++ specific headers */
#include <driver.h>
#include <connection.h>
#include <statement.h>
#include <prepared_statement.h>
#include <resultset.h>
#include <metadata.h>
#include <resultset_metadata.h>
#include <exception.h>
#include <warning.h>

#define DBHOST "removed"
#define USER "removed"
#define PASSWORD "removed"
#define DATABASE "removed"

#define NUMOFFSET 1
#define COLNAME 1

using namespace std;
using namespace sql;

static void retrieve_data_and_print (ResultSet *rs, int type, int colidx, string colname) {

    /* retrieve the row count in the result set */
    cout << "\nRetrieved " << rs -> rowsCount() << " row(s)." << endl;

    cout << "\nTestColumnName" << endl;
    cout << "--------" << endl;

    /* fetch the data : retrieve all the rows in the result set */
    while (rs->next()) {
        if (type == NUMOFFSET) {
                       cout << rs -> getString(colidx) << endl;
        } else if (type == COLNAME) {
                       cout << rs -> getString(colname) << endl;
        } // if-else
    } // while

    cout << endl;
}

int main(int argc, const char *argv[]) {
    Driver *driver;
    Connection *con;
    Statement *stmt;
    ResultSet *res;
    PreparedStatement *prep_stmt;
    Savepoint *savept;

    int updatecount = 0;

    /* initiate url, user, password and database variables */
    string url(argc >= 2 ? argv[1] : DBHOST);
    const string user(argc >= 3 ? argv[2] : USER);
    const string password(argc >= 4 ? argv[3] : PASSWORD);
    const string database(argc >= 5 ? argv[4] : DATABASE);

    try {
        driver = get_driver_instance();

        /* create a database connection using the Driver */
        con = driver -> connect(url, user, password);

        /* turn off autocommit */
        con -> setAutoCommit(0);

        cout << "Database connection\'s autocommit mode = " << con -> getAutoCommit() << endl;

        // select database schema
        con -> setSchema(database);

        // create a statement object
        stmt = con -> createStatement();

        cout << "Executing Query: \"SELECT * FROM organizations\" ... " << endl;

        /* run query */
        res = stmt -> executeQuery ("SELECT * FROM organizations");

        cout << "Retrieving the result set ..." << endl;
        retrieve_data_and_print (res, NUMOFFSET, 1, string("TestColumnName"));

    } catch (SQLException &e) {
        cout << "ERROR: SQLException in " << __FILE__;
        cout << " (" << __func__<< ") on line " << __LINE__ << endl;
        cout << "ERROR: " << e.what();
        cout << " (MySQL error code: " << e.getErrorCode();
        cout << ", SQLState: " << e.getSQLState() << ")" << endl;

        if (e.getErrorCode() == 1047) {
            /*
            Error: 1047 SQLSTATE: 08S01 (ER_UNKNOWN_COM_ERROR)
            Message: Unknown command
            */
            cout << "\nYour server does not seem to support Prepared Statements at all. ";
            cout << "Perhaps MYSQL < 4.1?" << endl;
        }

        return EXIT_FAILURE;
    } catch (std::runtime_error &e) {

        cout << "ERROR: runtime_error in " << __FILE__;
        cout << " (" << __func__ << ") on line " << __LINE__ << endl;
        cout << "ERROR: " << e.what() << endl;

        return EXIT_FAILURE;
    }

    return EXIT_SUCCESS;
}
like image 469
Shnibble Avatar asked Aug 23 '16 18:08

Shnibble


2 Answers

I was facing the same error because of incorrect linker,and maybe your linkers are not correct. Use these linkers

-lmysqlpp -lmysqlclient

Also you can follow this tutorial written by me on Eclipse (Ubuntu). Hope it will work with codeblocks too.

like image 200
Md Samiul Alim Sakib Avatar answered Oct 21 '22 02:10

Md Samiul Alim Sakib


Here are a few of things you can try:

1. Try giving the linker an explicit name for your libs:

C:\Program Files\MySQL\MySQL Connector C++ 1.1.7\lib\opt\libmysqlcppconn.lib
C:\Program Files\MySQL\MySQL Connector C++ 1.1.7\lib\opt\libmysqlcppconn-static.lib`

Note: I added lib in front of those library names

Try linking in the dll for this instead of the static library if this doesn't work.

2. Try using MySQL_Driver instead of Driver(just for kicks):

#include <mysql_driver.h> 
...
...
sql::mysql::MySQL_Driver *driver;
...
...
try 
{     
  driver = sql::mysql::get_driver_instance();

3. You could try re-installing the connector c++ library from https://dev.mysql.com/downloads/connector/cpp/

like image 38
wizurd Avatar answered Oct 21 '22 03:10

wizurd