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

Variations to this question have been asked many times before, but I have looked through everything that I can find on the Internet, but still do not have a valid answer, or at least the one that works.

I am trying to configure Code :: Blocks to use the MySql Connector to run the tutorial here . I did everything as far as I know, but still get the "undefined reference" error when compiling. I am sure this is a communication error.

Here is the error I get when compiling:

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-> Connector :

 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 

As I said, there are many questions on the Internet about this particular error, but I did not find anything with a solution for my setup. I admit that I'm a bit rusty in linking libraries, but I swear I tried all the possible options that I could come up with 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\ 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; } 
+5
source share
2 answers

Here are a few things you can try:

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

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 before library names

Try connecting to the dll for this instead of the static library if this does not work.

2. Try using MySQL_Driver instead of Driver (kick only):

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

3. You can try reinstalling the C ++ library from https://dev.mysql.com/downloads/connector/cpp/

+1
source

I encountered the same error due to the wrong linker, and maybe your linkers are not correct. Use these linkers

 -lmysqlpp -lmysqlclient 

You can also follow this tutorial written by me on Eclipse (Ubuntu). I hope that it will work with code blocks.

+1
source

All Articles