2016-11-19 4 views
-1

Ich verwende SQLPP11 für SQL-Abfragen und Ergebnisse und SQLPP11-Connector-mysql, um Verbindung mit der Datenbank herzustellen.undefined Verweis auf `sqlpp :: mysql :: connection :: ~ Verbindung() '

Und mein Programm kompiliert

g++ -std=c++1y main.cpp -I ../date -lsqlpp-mysql -lmysqlclient -lboost_system -lpthread 

mit Und hier ist der Beispielcode ich verwende.

bool db_connection() 
{ 
    auto config = std::make_shared<mysql::connection_config>(); 
    config->user = "root"; 
    config->password = ""; 
    config->database = "test"; 
    config->debug = true; 
    sqlpp::mysql::connection db(config); 
    try 
    { 
     sqlpp::mysql::connection db(config); 
     std::cout << "Database connection establish...!!\n"; 

     std::cout << "Now executing a very simple select query in table using sqlpp11 \n"; 

     const auto g = changestreet::Goals{}; 
     for(const auto& row : db(select(all_of(g)).from(g).unconditionally())) 
     { 
      std::cerr << row.goalId << "\n"; 
      std::cerr << row.goalName << "\n"; 
      std::cerr << row.goalAmount << "\n"; 
     } 

    } 
    catch (const sqlpp::exception& e) 
    { 
     std::cerr << "No such database exits, you'll need to create it. \n"; 
     std::cerr << e.what() << std::endl; 
     return false; 
    } 

    return true; 
} 

Und die Fehler sind

/tmp/ccxRheKs.o: In function `db_connection_cs()': 
main.cpp:(.text+0x39d): undefined reference to `sqlpp::mysql::connection::connection(std::shared_ptr<sqlpp::mysql::connection_config> const&)' 
main.cpp:(.text+0x3c8): undefined reference to `sqlpp::mysql::connection::~connection()' 
main.cpp:(.text+0x400): undefined reference to `sqlpp::mysql::connection::~connection()' 
/tmp/ccxRheKs.o: In function `db_connection_nav()': 
main.cpp:(.text+0x4bf): undefined reference to `sqlpp::mysql::connection::connection(std::shared_ptr<sqlpp::mysql::connection_config> const&)' 
main.cpp:(.text+0x4ea): undefined reference to `sqlpp::mysql::connection::~connection()' 
main.cpp:(.text+0x522): undefined reference to `sqlpp::mysql::connection::~connection()' 
/tmp/ccxRheKs.o: In function `sqlpp::mysql::serializer_t::escape(std::string)': 
main.cpp:(.text._ZN5sqlpp5mysql12serializer_t6escapeESs[_ZN5sqlpp5mysql12serializer_t6escapeESs]+0x2a): undefined reference to `sqlpp::mysql::connection::escape(std::string const&) const' 
/tmp/ccxRheKs.o: In function `sqlpp::result_t<sqlpp::mysql::char_result_t, sqlpp::result_row_t<sqlpp::mysql::connection, sqlpp::field_spec_t<changestreet::Goals_::GoalId::_alias_t, sqlpp::integral, false, false>, sqlpp::field_spec_t<changestreet::Goals_::GoalName::_alias_t, sqlpp::text, true, false>, sqlpp::field_spec_t<changestreet::Goals_::GoalAmount::_alias_t, sqlpp::floating_point, true, false>, sqlpp::field_spec_t<changestreet::Goals_::GoalStartTime::_alias_t, sqlpp::day_point, true, false>, sqlpp::field_spec_t<changestreet::Goals_::GoalEndTime::_alias_t, sqlpp::day_point, true, false>, sqlpp::field_spec_t<changestreet::Goals_::GoalMonthlyContribution::_alias_t, sqlpp::floating_point, true, false>, sqlpp::field_spec_t<changestreet::Goals_::GoalStatus::_alias_t, sqlpp::text, true, false>, sqlpp::field_spec_t<changestreet::Goals_::UsersUserId::_alias_t, sqlpp::integral, true, false> > >::~result_t()': 
main.cpp:(.text._ZN5sqlpp8result_tINS_5mysql13char_result_tENS_12result_ro 

Hier ist die build logs der beiden Bibliotheken auf meinem 64-Bit-debian-Maschine.

Antwort

1

Schließlich habe ich die Lösung herausgefunden.

Es war das Problem mit der g ++ Version. Aktuelle Versionen g++-5 und g++-6 haben solche Probleme, aber wenn ich zurück zu alten g++ Version 4.9.2 komme läuft alles reibungslos.

+1

Das deutet stark darauf hin, dass libsqlpp-mysql mit einem anderen Compiler als dem erstellt wurde, mit dem Sie die Bibliothek verwenden wollten. Ich würde wetten, das Problem würde verschwinden, wenn Sie CMake sagen würden, die Bibliothek mit 'g ++ - 5' oder' g ++ - 6' anstelle des Systemstandards zu erstellen. – ildjarn

0

"undefinierter Verweis auf" bedeutet normalerweise, dass der Linker die erforderliche Bibliothek nicht finden kann. Stellen Sie sicher, dass Ihre PATH-Umgebung die libs sqlpp-mysql mysqlclient im Bereich enthält.

+1

Wäre der Linker nicht fehlerhaft, wenn er eine vom Benutzer angegebene Bibliothek nicht finden konnte? – ildjarn

+0

Gut. Der Benutzer hat möglicherweise mehrere Versionen der Bibliothek installiert, und etwas (Pfad, .so Name usw.) verwirrt den Linker. – Ripi2