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
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ć