Mysql: undefined reference



  • Hallo,

    ich habe schon an allen Ecken des Internets nach einer Lösung gesucht aber keine Lösung gefunden. Ich habe folgendes Problem:

    Ich möchte mit meinem C++ Programm ein Feld aus einer Mysql-Tabelle lesen, jedoch bekomme ich beim kompillieren folgende Fehlermeldung:

    ...\main.cpp|59|undefined reference to `_imp___ZN3sql5mysql19get_driver_instanceEv'|

    Habe ich eventuell vergessen etwas zu inkludieren etc? Habe danach gegoogelt und das Problem soll eine fehlende library sein(es sind aber alle inkludiert). Ich habe das Programm im moment 1:1 von http://dev.mysql.com/doc/connector-cpp/en/connector-cpp-tutorials-background.html übernommen und werde es, sobald das Problem beseitigt ist, abändern und in mein Programm einbauen.

    #include <cstdlib>
    #include <iostream>
    
    #include <mysql_connection.h>
    #include <mysql_driver.h>
    
    #include <cppconn/driver.h>
    #include <cppconn/config.h>
    #include <cppconn/connection.h>
    #include <cppconn/statement.h>
    #include <cppconn/exception.h>
    
    using namespace std;
    using namespace sql;
    using namespace sql::mysql;
    
    int main(void)
    {
    
    try {
      sql::Driver *driver;
      sql::Connection *con;
      sql::Statement *stmt;
      sql::ResultSet *res;
    
      /* Create a connection */
      /* Hier tritt der fehler auf: */
      driver = sql::mysql::get_driver_instance();
      con = driver->connect("tcp://127.0.0.1:3306", "root", "root");
      /* Connect to the MySQL test database */
      con->setSchema("test");
    
      stmt = con->createStatement();
      res = stmt->executeQuery("SELECT 'Hello World!' AS _message");
      while (res->next()) {
        cout << "\t... MySQL replies: ";
        /* Access column data by alias or column name */
        cout << res->getString("_message") << endl;
        cout << "\t... MySQL says it again: ";
        /* Access column fata by numeric offset, 1 is the first column */
        cout << res->getString(1) << endl;
      }
      delete res;
      delete stmt;
      delete con;
    
    } catch (sql::SQLException &e) {
      cout << "# ERR: SQLException in " << __FILE__;
      cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;
    
      cout << "# ERR: " << e.what();
      cout << " (MySQL error code: " << e.getErrorCode();
      cout << ", SQLState: " << e.getSQLState() << " )" << endl;
    }
    
    cout << endl;
    
    return EXIT_SUCCESS;
    }
    


  • Libraries inkludiert man nicht, du musst gegen sie linken.



  • Ah sorry hab mich falsch ausgedrückt 🙂

    http://s7.directupload.net/images/140812/g9hir6x2.png

    so müsste das eigentlich passen oder?



  • Theoretisch schon. Obs die richtige Bibliothek ist, weiß ich nicht. Hier gibts auch einen Thread zu dem Thema:

    http://forums.mysql.com/read.php?167,265512,265512



  • 3. Be sure you got the -m64 set in the Eclipse compiler options too.

    Das sagt mir als Anfänger leider gar nichts 😞

    PS: ich benutze Codeblocks



  • Benutze auch kein Eclipse, danach kann man aber leicht googeln. Das ist eine Option, um in 64Bit zu bauen. Kann es bei dir ein 32/64 Bit Problem sein, dass die Lib nicht zu deinem Projekt passt?



  • The codeblocks-13.12mingw-setup.exe file includes the GCC compiler and GDB debugger from TDM-GCC (version 4.7.1, 32 bit).

    Ich benutze folgenden mysql-connector:

    Windows (x86, 64-bit), MSI Installer(mysql-connector-c++-1.1.4-winx64.msi)

    Das könnte das Problem sein oder?

    Edit: hab die 64bit-Libraries mal gegen 32bit-Libraries ausgetauscht. Immer noch gleiche Fehlermeldung.


Anmelden zum Antworten