Samo Zuooo czyli MySQL++

Właśnie jestem w trakcie pisania modułu mojej aplikacji odpowiedzialnego za kontaktowanie się z zewnętrzną bazą danych. Po poszukiwaniach biblioteki okazało się iż te naj pod każdym względem (czyli wieloplatformowe, obsługujące wiele baz danych, napisane obiektowo) są niestety płatne.

Po zawężeniu wymagań do wieloplatformowości i obiektowości postanowiłem wypróbować bibliotekę MySQL++.

Problem polega w tym iż najprawdopodobniej pożegnam się z tą biblioteką gdyż

  • walczę z nią już od dwóch dni
  • dostaję dziwne błędy
  • najprawdopodobniej biblioteka jest źle zaplanowana albo ludziom którzy ją prowadzą nudzi się gdyż ciągle są jakieś niezgodności z kolejnymi wersjami

Jeśli chodzi o te dziwne błędy, to z początku dotyczyły tego iż kompilator krzyczał iż (skopiowana z przykładu!) funkcja o sygnaturze mysqlpp::Connection::connect(const char*,const char*,const char*,const char*) nie może zostać odnaleziona. Okazało się iż wersja znajdująca się w repozytorium była nieaktualna, wobec czego odinstalowałem ją i zainstalowałem ze źródła.

Teraz gdy kompilator uciszył się… linker zaczął swoje. Mianowicie mimo dołączenia biblioteki mysqlpp twierdzi iż nie może znaleść niektórych (czytaj: 99%) funkcji! Szlag by to, można stracić rozum gdy robi się wszystko zgodnie ze swoją intuicją/plikami README/wynikami Google a i tak dostaje się taką litanię:

undefined reference to `mysqlpp::Connection::query(char const*)’|
mysqlexamfactory.cpp:(.text+0xb1e)||undefined reference to `mysqlpp::SQLTypeAdapter::SQLTypeAdapter(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)’|
mysqlexamfactory.cpp:(.text+0xb32)||undefined reference to `mysqlpp::Query::store(mysqlpp::SQLTypeAdapter const&)’|
mysqlexamfactory.cpp:(.text+0xbd7)||undefined reference to `mysqlpp::operator<<(std::basic_ostream<char, std::char_traits<char> >&, mysqlpp::String const&)’|
obj/Release/mysqlexamfactory.o||In function `CMySQLExamFactory::CMySQLExamFactory(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)’ :|
mysqlexamfactory.cpp:(.text+0×1167)||undefined reference to `mysqlpp::Connection::query(char const*)’|
mysqlexamfactory.cpp:(.text+0×118e)||undefined reference to `mysqlpp::SQLTypeAdapter::SQLTypeAdapter(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)’|
mysqlexamfactory.cpp:(.text+0×11a2)||undefined reference to `mysqlpp::Query::store(mysqlpp::SQLTypeAdapter const&)’|
mysqlexamfactory.cpp:(.text+0×1247)||undefined reference to `mysqlpp::operator<<(std::basic_ostream<char, std::char_traits<char> >&, mysqlpp::String const&)’

Dlatego jeśli zaraz nie uda mi się zmusić tej biblioteki do współpracy to będę zmuszony odnaleść inną, lepiej dopracowaną i user-friendly.

Szczerze mówiąc pierwszy raz się spotkałem z tak niewspółpracującą biblioteką…

// edit

Ostatecznie udało mi się zmusić ją do współpracy… ech ciężka bitwa :P Okazało się iż nie została poprawnie odinstalowana poprzednia wersja bibliteki czego efektem było to iż linker stosował się do starej biblioteki w której nie było tych funkcji. Skoro teraz wszystko w końcu działa, mogę zabrać się wreszcie do programowania :) Mam jeszcze tylko nadzieję iż gdy będę kompilował na Windowsie nie będę musiał się tak samo użerać :P

Napisz odpowiedź