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:
#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; }