Właściwie wszystko zawarłem w temacie Używam Linuksa. Dodam jeszcze, że próbowałem libpqxx, ale kompatybilna z C++11 jest tylko wersja 4.0.1, ale mogłem jej nigdzie znaleźć. Skompilować też próbowałem, ale nic z tego nie wyszło.
Słyszał ktoś kiedykolwiek o SQLpp11?
O ile wiem to większość tych bibliotek do C++ wrapuje tylko libpq. Może sam napisz własny wraper jak nic Ci nie pasuje?
Słabo szukałeś http://pqxx.org/development/libpqxx/wiki/DownloadPage
Mają też swoje repo na svn, więc zawsze można zaciągnąć również rozwojową wersję 5.0 i spróbować co działa.
Znalazłem to na samym początku, jeszcze przed instalacją 4.0. Niestety nie radzę sobie z kompilacją. Ogólnie to jest moja pierwsza zewnętrzna biblioteka (nie licząc SFML), na Eclipse przeszedłem niedawno, Linux też jest dla mnie nowy, a serwery i bazy danych zaczynam właśnie od tego.
Zdecydowałem się teraz na SQLpp11. Nie wiem tylko, jak się zabrać za jej dołączanie.
Spróbuj skompilować libpqxx 4.0.1
-
Pobierz bibliotekę:libpqxx-4.0.1.tar.gz.md5sum libpqxx-4.0.1.tar.gz
-
Sprawdź sumę kontrolną poleceniem md5sum -c libpqxx-4.0.1.tar.gz.md5sum
-
Rozpakuj archiwum komendą tar -xzvf libpqxx-4.0.1.tar.gz
-
Przejdź do katalogu komendą cd libpqxx-4.0.1
-
Wydaj polecenie ./configure
(opcjonalnie możesz wywołać ./configure --prefix= (ścieżka gdzie chcesz zainstalować bibliotekę domyślnie /usr/local) --enable-shared (aby linkować dynamicznie))
-
Skompiluj bibliotekę poleceniem make
-
Zainstaluj poleceniem make install
W razie problemów podaj błędy które dostajesz.
Właśnie to robiłem. Wyrzucało mi błędy przy make. Spróbuję później to zrobić jeszcze raz, teraz nie mogę.
Spójrz na linijkę 1359 tego co wkleiłeś.
–Przypadkiem wysłałem to samo dwa razy, tu był duplikat.–
Z tego co podałeś wynika, że zainstalowałeś wszystko w /usr/include/pqxx/ więc powinny tam się znajdować foldery lib oraz include.
W folderze lib masz bibliotekę statyczną libpqxx.a którą możesz zlinkować ze swoim projektem.(jeśli chciałbyś linkować dynamicznie to musisz wywołać ./configure --enable-shared i wtedy dostaniesz po kompilacji bibliotekę dynamiczną libpqxx.so)
W folderze include natomiast znajdują się pliki nagłówkowe które załączasz w projekcie.
A więc tak jak pisałem wcześniej:link
Project>>Propeties (rozwijasz) C\C++Build>>Settings z listy wybierasz GCC C++ Compiler >> Includes
w polu Include paths podajesz ścieżkę do plików nagłówkowych (w twoim przypadku :/usr/include/pqxx/include/pqxx)
następnie przechodzisz do pozycji GCC C++ Linker>>Libraries i w polu Libraries dodajesz nazwę biblioteki np, pqxx
W polu Library search patch dodajesz położenie biblioteki (w twoim przypadku /usr/include/pqxx/lib)
Ostatecznie załączasz plik nagłówkowy do projektu dodając np w pliku main:
#include<pqxx>
using namespace pqxx;
Do tego udało mi się dojść, podając ścieżki bezwzględne w #include. Teraz dostaję błąd:
/usr/include/pqxx/include/pqxx/pqxx:17:29: fatal error: pqxx/binarystring: Nie ma takiego pliku ani katalogu
Wcześniej też go dostawałem i myślałem, że robię coś źle. Okazuje się, że w pliku nagłówkowym pqxx jest:
#include "pqxx/binarystring"
Podczas, gdy powinno być bez “pqxx/”, ponieważ znajdują się w tym samym katalog. Taki sam błąd jest w “binarystring” i właściwie wszystkich innych plikach. Poprawię wszystkie pliki i zobaczę, co z tego wyjdzie.
Zainstalowałem od nowa. Tym razem w /usr. Tak więc teraz ścieżki to /usr/include/pqxx i /usr/lib. Teraz dostaję to:
Przetestowałem u siebie, a więc tak:
Zainstaluj biblotekę do /usr/local/ (aby nie robić bałaganu w systemie lub do /opt).
Przed kompilacją biblioteki wpisz: make clean i ./configure --prefix=/usr/local --enable-shared
Potem make i sudo make install
W /usr/local/lib powinieneś mieć pliki libpqxx.a i libpqxx.so
W /usr/local/include powinieneś mieć folder pqxx z plikami nagłówkowymi.
Następnie w Eclipse
W include paths wpisujesz: /usr/local/include
W Libraries wpisujesz: pqxx
W Library search path :/usr/local/lib
W projekcie załączasz biblotekę: #include <pqxx/pqxx>
Mam nadzieje, że teraz będzie działać (przynajmniej u mnie wszystko się kompiluje bez błędów).
Wszystko zrobiłem tak, jak napisałeś. Wszystkie pliki znajdują się na właściwym miejscu. Program kompiluje się, ale przy próbie uruchomienia dostaję :
error while loading shared libraries: libpqxx-4.0.so: cannot open shared object file: No such file or directory
Ten plik znajduje się w /usr/local/lib obok libpqxx.a i libpqxx.so.
Natomiast przy bez --enable-shared błędy są takie, jak we wcześniejszym poście. Wydaje mi się, że to problem z libpq.
Rozumiem, że udało ci się skompilować program i teraz nie możesz go uruchomić.
Według mnie te błędy wynikają z tego, że program po skompilowaniu nie może znaleźć bibloteki libpqxx.
Przejdź do folderu ze swoim programem i wydaj polecenie : ldd nazwa_skompilowanego_programu wklej tu to co dostaniesz na wyjściu.
Przejdź do /etc/ld.so.conf.d/ i utwórz tam plik np, libpqxx-4.0.1.conf z zawartością /usr/local/lib
Potem wydaj komendę w konsoli sudo ldconfig
Spróbuj uruchomić program.
Opcjonalnie jeśli zrobisz to co powyżej podaj wyjście z komend ldconfig -p i jeszcze raz
ldd nazwa_skompilowanego_programu
Działa! Program kompiluje i uruchamia się. Haczyk w tym, że działa to tylko w wersji debug. Release nie chce się skompilować.
Eclipse używa osobnych ustawień dla Debug i Release, a więc po przełączeniu na Release musisz jeszcze raz w ustawieniach projektu dodać bibliotekę w odpowiednich polach:
W include paths wpisujesz: /usr/local/include
W Libraries wpisujesz: pqxx
W Library search path :/usr/local/lib
Wszystko działa! Bardzo dziękuję za pomoc. Nie mam pojęcia, jak ci się odwdzięczyć.