PostgreSQL i C++11 jaka biblioteka?

Właściwie wszystko zawarłem w temacie :slight_smile: 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? :wink:

Słabo szukałeś :wink: 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

  1. Pobierz bibliotekę:libpqxx-4.0.1.tar.gz.md5sum  libpqxx-4.0.1.tar.gz

  2. Sprawdź sumę kontrolną poleceniem md5sum -c libpqxx-4.0.1.tar.gz.md5sum

  3. Rozpakuj archiwum komendą tar -xzvf libpqxx-4.0.1.tar.gz

  4. Przejdź do katalogu komendą cd libpqxx-4.0.1

  5. 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))

  1. Skompiluj bibliotekę poleceniem make

  2. 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ę.

Próbowałem kilka razy i nie wyszło mi z tego nic.

Terminal:

http://wklej.org/id/1819425/

Spójrz na linijkę 1359 tego co wkleiłeś. :stuck_out_tongue:

–Przypadkiem wysłałem to samo dwa razy, tu był duplikat.–

Widziałem to, ale jest tam tylko:

Co mam z tym zrobić?

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:

http://wklej.org/id/1819738/

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

http://wklej.org/id/1820730/

 

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