[Linux]Probleme mit libs (curl/mysql++)
-
Hi Leute
Ich hab seit kurzem Probleme mit dem einbinden meiner Librarys.
Ich versuch seit mehreren Tagen den Fehler zu finden wie ich
curl und mysql++ zum laufen bringe.bei curl kommt das:
data/game.cpp||In member function ‘void Game::new_game(std::string, std::string)’:| updater.o||In function `Updater::Updater()':| updater.cpp:(.text+0x56)||undefined reference to `curl_easy_init'| updater.cpp:(.text+0x98)||undefined reference to `curl_easy_setopt'| updater.cpp:(.text+0xb3)||undefined reference to `curl_easy_setopt'| updater.cpp:(.text+0xbe)||undefined reference to `curl_easy_cleanup'| updater.cpp:(.text+0x144)||undefined reference to `curl_easy_setopt'| updater.cpp:(.text+0x15f)||undefined reference to `curl_easy_setopt'| updater.cpp:(.text+0x16a)||undefined reference to `curl_easy_cleanup'| updater.o||In function `Updater::Updater()':| updater.cpp:(.text+0x206)||undefined reference to `curl_easy_init'| updater.cpp:(.text+0x248)||undefined reference to `curl_easy_setopt'| updater.cpp:(.text+0x263)||undefined reference to `curl_easy_setopt'| updater.cpp:(.text+0x26e)||undefined reference to `curl_easy_cleanup'| updater.cpp:(.text+0x2f4)||undefined reference to `curl_easy_setopt'| updater.cpp:(.text+0x30f)||undefined reference to `curl_easy_setopt'| updater.cpp:(.text+0x31a)||undefined reference to `curl_easy_cleanup'| ||=== Build finished: 14 errors, 7 warnings ===|
bei mysql++:
data/updater.hpp|7|error: mysql++.h: No such file or directory|
wenn ich mysql++ so einbinde #include <mysql++/mysql++.h>:
/usr/include/mysql++/common.h|124|error: mysql_version.h: No such file or directory| /usr/include/mysql++/common.h|182|error: mysql.h: No such file or directory| /usr/include/mysql++/type_info.h|83|error: expected ‘,’ or ‘...’ before ‘bt’| /usr/include/mysql++/type_info.h|98|error: ‘enum_field_types’ does not name a type| /usr/include/mysql++/type_info.h||In constructor ‘mysqlpp::mysql_ti_sql_type_info::mysql_ti_sql_type_info()’:| /usr/include/mysql++/type_info.h|71|error: class ‘mysqlpp::mysql_ti_sql_type_info’ does not have any field named ‘base_type_’| /usr/include/mysql++/type_info.h|75|error: ‘FIELD_TYPE_NULL’ was not declared in this scope| /usr/include/mysql++/type_info.h||In constructor ‘mysqlpp::mysql_ti_sql_type_info::mysql_ti_sql_type_info(const char*, const std::type_info&, int)’:| /usr/include/mysql++/type_info.h|87|error: class ‘mysqlpp::mysql_ti_sql_type_info’ does not have any field named ‘base_type_’| /usr/include/mysql++/type_info.h|87|error: ‘bt’ was not declared in this scope| /usr/include/mysql++/type_info.h|88|error: ‘flags’ was not declared in this scope| /usr/include/mysql++/type_info.h|168|error: expected ‘)’ before ‘t’| /usr/include/mysql++/type_info.h|270|error: ‘enum_field_types’ does not name a type| /usr/include/mysql++/type_info.h|304|error: ‘enum_field_types’ has not been declared| /usr/include/mysql++/type_info.h||In member function ‘const mysqlpp::mysql_type_info mysqlpp::mysql_type_info::base_type() const’:| /usr/include/mysql++/type_info.h|230|error: ‘const class mysqlpp::mysql_ti_sql_type_info’ has no member named ‘base_type_’| /usr/include/mysql++/sql_buffer.h|71|error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’| /usr/include/mysql++/sql_buffer.h|76|error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’| /usr/include/mysql++/sql_buffer.h||In member function ‘bool mysqlpp::SQLBuffer::is_string()’:| /usr/include/mysql++/sql_buffer.h|95|error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’| /usr/include/mysql++/field.h|58|error: expected ‘,’ or ‘...’ before ‘*’ token| /usr/include/mysql++/field.h||In constructor ‘mysqlpp::Field::Field(int)’:| /usr/include/mysql++/field.h|59|error: ‘pf’ was not declared in this scope| /usr/include/mysql++/field.h|64|error: ‘UNSIGNED_FLAG’ was not declared in this scope| /usr/include/mysql++/field.h|65|error: ‘NOT_NULL_FLAG’ was not declared in this scope| /usr/include/mysql++/field.h||In member function ‘bool mysqlpp::Field::auto_increment() const’:| /usr/include/mysql++/field.h|85|error: ‘AUTO_INCREMENT_FLAG’ was not declared in this scope| /usr/include/mysql++/field.h||In member function ‘bool mysqlpp::Field::binary_type() const’:| /usr/include/mysql++/field.h|88|error: ‘BINARY_FLAG’ was not declared in this scope| /usr/include/mysql++/field.h||In member function ‘bool mysqlpp::Field::blob_type() const’:| /usr/include/mysql++/field.h|91|error: ‘BLOB_FLAG’ was not declared in this scope| /usr/include/mysql++/field.h||In member function ‘bool mysqlpp::Field::enumeration() const’:| /usr/include/mysql++/field.h|97|error: ‘ENUM_FLAG’ was not declared in this scope| /usr/include/mysql++/field.h||In member function ‘bool mysqlpp::Field::multiple_key() const’:| /usr/include/mysql++/field.h|110|error: ‘MULTIPLE_KEY_FLAG’ was not declared in this scope| /usr/include/mysql++/field.h||In member function ‘bool mysqlpp::Field::primary_key() const’:| /usr/include/mysql++/field.h|121|error: ‘PRI_KEY_FLAG’ was not declared in this scope| /usr/include/mysql++/field.h||In member function ‘bool mysqlpp::Field::set_type() const’:| /usr/include/mysql++/field.h|124|error: ‘SET_FLAG’ was not declared in this scope| /usr/include/mysql++/field.h||In member function ‘bool mysqlpp::Field::timestamp() const’:| /usr/include/mysql++/field.h|130|error: ‘TIMESTAMP_FLAG’ was not declared in this scope| /usr/include/mysql++/field.h||In member function ‘bool mysqlpp::Field::unique_key() const’:| /usr/include/mysql++/field.h|136|error: ‘UNIQUE_KEY_FLAG’ was not declared in this scope| /usr/include/mysql++/field.h||In member function ‘bool mysqlpp::Field::zerofill() const’:| /usr/include/mysql++/field.h|139|error: ‘ZEROFILL_FLAG’ was not declared in this scope| /usr/include/mysql++/mystring.h|197|error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’| /usr/include/mysql++/mystring.h|211|error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’| /usr/include/mysql++/mystring.h|226|error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’| /usr/include/mysql++/mystring.h|243|error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’| /usr/include/mysql++/mystring.h|256|error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’| /usr/include/mysql++/mystring.h|270|error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’| /usr/include/mysql++/mystring.h||In member function ‘mysqlpp::mysql_type_info mysqlpp::String::type() const’:| /usr/include/mysql++/mystring.h|450|error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’| /usr/include/mysql++/mystring.h||In member function ‘mysqlpp::String& mysqlpp::String::operator=(const std::string&)’:| /usr/include/mysql++/mystring.h|458|error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’| /usr/include/mysql++/mystring.h||In member function ‘mysqlpp::String& mysqlpp::String::operator=(const char*)’:| /usr/include/mysql++/mystring.h|471|error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’| /usr/include/mysql++/row.h|137|error: expected ‘)’ before ‘row’| /usr/include/mysql++/result.h|168|error: expected ‘)’ before ‘*’ token| /usr/include/mysql++/result.h|231|error: expected ‘)’ before ‘*’ token| /usr/include/mysql++/result.h|281|error: ‘MYSQL_RES’ was not declared in this scope| /usr/include/mysql++/result.h|281|error: template argument 1 is invalid| /usr/include/mysql++/result.h|308|error: expected ‘)’ before ‘*’ token| /usr/include/mysql++/result.h|354|error: ‘MYSQL_ROW’ does not name a type| /usr/include/mysql++/result.h|385|error: expected type-specifier before ‘MYSQL_RES’| /usr/include/mysql++/result.h|401|error: ‘MYSQL_RES’ was not declared in this scope| /usr/include/mysql++/result.h|401|error: template argument 1 is invalid| /usr/include/mysql++/result.h|401|error: template argument 2 is invalid| ||More errors follow but not being shown.| ||Edit the max errors limit in compiler options...| ||=== Build finished: 50 errors, 0 warnings ===|
weiß einer weiter?
Gruß,
Nico
-
1. Curl-Lib dazulinken.
2. Pfad mit Mysql-Include-Dateien dem Compiler bekannt machen.
-
Zeig mal deinen Befehl mit dem du dein Projekt kompilierst.
Du hast bestimmt sowas wie:g++ updater.cpp -c -I$(CURL_INCLUDE_DIR) -o updater.o
Da fehlt so wie es aussieht
1. Das Verzeichnes der Curl-Library, das fügst du mit "-L$(CURL_LIB_DIR)" als Argument hinzu. CURL_LIB_DIR musst du davor noch im Makefile oder wo auch immer auf das Verzeichnis setzen
2. Die Library an sich musst du noch ins Projekt einbinden mit "-lcurlpp" als ArgumentDiese Beiden Schritte musst du erst beim Linken mit angeben.
Wenns nicht klappt, zeig mal bitte wie du kompiliert hast, also Makefile oder was auch immer.
Zu dem MySQL Zeugs, da sagt der Kompiler ja schon alles. Die ganzen Dateien findet der nicht. Schau mal ob die überhaupt in /usr/include/mysql++ vorhanden sind. Wenn du die seperat in ein anderes Verzeichnis gelegt hast, musst du dieses Verzeichnis mit -I$(MYSQL_INCLUDE_DIR) angeben.
-
Also ich mach das mit Code::Blocks ich bind das so ein :
Project build options -> linker settings -> add -> /usr/lib/libcurl.so und /usr/lib/libmysqlpp.so
Search Directories -> Compiler -> add -> /usr/include/curl und /usr/include/mysql++
Linker -> add -> /usr/lib
Die Mysql++ dateien sind da.
Bei curl solte man ja bei Other linker options -lcurl einbinden wenn sowas kommt hab ich auch gemacht geht trotzdem nicht.
-
So ich hab mal in den Quelltext von Mysql++ geschaut un es ist mir aufgefallen das die pfade der header dateien 2 definitionen haben:
#if defined(MYSQLPP_MYSQL_HEADERS_BURIED) # include <mysql/mysql_version.h> #else # include <mysql_version.h> #endif
und man muss in meinem Fall:
#define MYSQLPP_MYSQL_HEADERS_BURIED
aktivieren
.
Das Problem mit mysql++ ist behoben
.
-
Oder du kannst doch auch einfach /usr/include/mysql als Suchpfad hinzufügen. Der sollte doch existieren, oder?
-
mysql++ geht ja jetz das ein einzigste was noch nicht geht ist curl
-
mysql++ meldet neue fehler:
updater.o||In function `Updater::load_soft_update()':| updater.cpp:(.text+0x2df)||undefined reference to `mysqlpp::Connection::Connection(bool)'| updater.cpp:(.text+0x30f)||undefined reference to `mysqlpp::Connection::connect(char const*, char const*, char const*, char const*, unsigned int)'| updater.cpp:(.text+0x31f)||undefined reference to `mysqlpp::Connection::error() const'| updater.cpp:(.text+0x3ac)||undefined reference to `mysqlpp::Connection::disconnect()'| updater.cpp:(.text+0x3b6)||undefined reference to `mysqlpp::Connection::~Connection()'| updater.cpp:(.text+0x418)||undefined reference to `mysqlpp::Connection::~Connection()'| ||=== Build finished: 6 errors, 2 warnings ===|
mysql++ und curl geben undefined reference an obwohl sie eingebunden sind ich weiß echt nicht weiter
.
-
Du musst dem Linker natürlich noch die lib übergeben - ansonsten findet er die adressen, wo er hinspringen soll, natürlich nicht...
genau das bedeutet undefined reference...
-
Versuch mal statt -lcurl -lcurlpp. Geht das?
-
Die Libs sind gelinkt curlpp hab ich auch probiert nichts geht.
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
gamebuntu: Probier doch mal auf der Commandline folgendes:
g++ -o foobar -I /usr/include/mysql -l mysqlpp $(pkg-config --libs --cflags curlpp) deinprogramm.cpp
Was für Fehler spuckt das aus?
-
So es hat sich von selber gelöst es geht jetzt warum anfangs das nicht ging weiß ich nicht