2012-06-01 20 views
6

Chcę połączyć się z bazą danych mysql z C++ w Linuksie. Na moim komputerze lokalnym używam Ubuntu i zainstalowaniu serwera i klienta pakiety mysql:Konfigurowanie Mysql ++ w Linuksie

sudo apt-get install mysql-server mysql-client

natknąłem Mysql++ ale mają pewne problemy podczas uruchamiania ./configure z ich pakietu binarnego. Błąd mówi:

checking for MySQL library directory... configure: error: Didn't find mysqlclient library in '/usr/lib64 /usr/lib /usr/lib64/mysql /usr/lib/mysql /usr/local/lib64 /usr/local/lib /usr/local/lib/mysql /usr/local/mysql/lib /usr/local/mysql/lib/mysql /usr/mysql/lib/mysql /opt/mysql/lib /opt/mysql/lib/mysql /sw/lib /sw/lib/mysql'

widzę gdzie mogę użyć tego polecenia, aby określić ścieżkę:

./configure --with-mysql-lib=/...

ale nie wiem gdzie go do punktu. Użyłem whereis mysql, ale nie mogę znaleźć żadnego katalogu mysql, który zawiera podkatalog lib. Gdzie zostałyby zainstalowane biblioteki mysqlclient?


EDIT:

Po wykonaniu zlokalizować libmysqlclient wróciłem

/usr/lib/i386-linux-gnu/libmysqlclient.so.18
/usr/lib/i386-linux-gnu/libmysqlclient.so.18.0.0
/usr/lib/i386-linux-gnu/libmysqlclient_r.so.18
/usr/lib/i386-linux-gnu/libmysqlclient_r.so.18.0.0
/usr/share/doc/libmysqlclient18
/usr/share/doc/libmysqlclient18/changelog.Debian.gz
/usr/share/doc/libmysqlclient18/copyright
/var/cache/apt/archives/libmysqlclient18_5.5.22-0ubuntu1_i386.deb
/var/lib/dpkg/info/libmysqlclient18:i386.list
/var/lib/dpkg/info/libmysqlclient18:i386.md5sums
/var/lib/dpkg/info/libmysqlclient18:i386.postinst
/var/lib/dpkg/info/libmysqlclient18:i386.postrm
/var/lib/dpkg/info/libmysqlclient18:i386.shlibs

Więc starałem ./configure --with-mysql-lib=/usr/lib/i386-linux-gnu i wydaje się, aby zakończyć bez narzekania.

Chociaż rozwiązuje to problem z uzyskaniem pliku ./configure, nadal mam dalsze problemy. Kiedy uruchamiam make wszystko pójdzie dobrze do tego momentu:

In file included from ./lib/sql_buffer.h:31:0, from ./lib/sql_buffer.cpp:26: ./lib/refcounted.h:258:2: error: ‘size_t’ does not name a type ./lib/refcounted.h: In constructor ‘mysqlpp::RefCountedPointer::RefCountedPointer()’: ./lib/refcounted.h:89:2: error: class ‘mysqlpp::RefCountedPointer’ does not have any field named ‘refs_’ ./lib/refcounted.h: In constructor ‘mysqlpp::RefCountedPointer::RefCountedPointer(T*)’: ./lib/refcounted.h:100:2: error: class ‘mysqlpp::RefCountedPointer’ does not have any field named ‘refs_’ ./lib/refcounted.h:104:4: error: ‘refs_’ was not declared in this scope ./lib/refcounted.h:104:16: error: expected type-specifier before ‘size_t’ ./lib/refcounted.h:104:16: error: expected ‘;’ before ‘size_t’ ./lib/refcounted.h: In constructor ‘mysqlpp::RefCountedPointer::RefCountedPointer(const ThisType&)’: ./lib/refcounted.h:112:2: error: class ‘mysqlpp::RefCountedPointer’ does not have any field named ‘refs_’ ./lib/refcounted.h:115:8: error: ‘refs_’ was not declared in this scope ./lib/refcounted.h: In destructor ‘mysqlpp::RefCountedPointer::~RefCountedPointer()’: ./lib/refcounted.h:125:7: error: ‘refs_’ was not declared in this scope ./lib/refcounted.h: In member function ‘void mysqlpp::RefCountedPointer::swap(mysqlpp::RefCountedPointer::ThisType&)’: ./lib/refcounted.h:246:13: error: ‘refs_’ was not declared in this scope make: *** [mysqlpp_sql_buffer.o] Error 1

nie jestem obeznany z C++, więc nie jestem pewien, co dokładnie oznacza błąd. Jakąkolwiek pomoc lub wskazówki dotyczące tego, jak uzyskać konfigurację Mysql ++ od tego momentu, będzie to bardzo cenne. Chociaż, przyznaję, że zaczynam także szukać alternatywnych bibliotek do wykorzystania.

Odpowiedz

8

ten problem jest spowodowany, ponieważ size_t zależy od włączenia przestrzeni nazw stddef, zanim zostanie wywołana w plikach konfiguracyjnych (make).

Miałem ten sam problem (przy użyciu serwera Amazon amazon EC2 ubuntu 12.04) i rozwiązałem go, edytując plik naruszający (sql_buffer.cpp zlokalizowany, w moim przypadku, /home/ubuntu/mysql++-3.1.0/lib) i w tym stddef (przy jednoczesnym przemieszczaniu się w górę przestrzeni nazw napisów):

#include <stddef.h> 
#include <string.h> 
#include "sql_buffer.h" 

Na twoje pytanie odpowiada ta korekta. ALE, możesz mieć dodatkowe problemy, tak jak ja. więc wyjaśniam, jak rozwiązałem kilka kolejnych problemów, które możesz lub nie masz.

może trzeba użyć

sudo chown username sql_buffer.cpp 

aby móc edytować plik, w zależności od sposobu zainstalowania jest setup (jestem ubuntu użytkownika, na przykład).

I wtedy wpadłem na inny problem:

./ssx/genv2.cpp: In function âbool generate_ssqls2(const char*, const ParseV2*)â: 
./ssx/genv2.cpp:70:28: error: âstrcmpâ was not declared in this scope 

więc edytowany plik przestępstwa (genv2.cpp) i obejmowały nazw ciąg

#include <string.h> 

wtedy miałem inny problem z:

./libmysqlpp_ssqls2parse.a(ssqls2parse_parsev2.o): In function `Type': 
/home/ubuntu/mysql++-3.1.0/./ssx/parsev2.cpp:256: undefined reference to `mysqlpp::internal::str_to_lwr 

Mogłem edytować Makefile.in, ale wybrałem po prostu uruchom w wierszu poleceń:

sudo g++ -o test_ssqls2 test_ssqls2_ssqls2.o -lmysqlpp_ssqls2parse -L. -lmysqlclient -L/usr/lib/x86_64-linux-gnu -lmysqlpp 

Następnie kontynuowałem proces make.

który działał dla mnie: mysql ++ zainstalowany i uruchomiony.

+2

Wow, dzięki za poświęcenie czasu na napisanie tego. Skończyło się na tym, że byłem sfrustrowany i użyłem MYSQL C api bezpośrednio Ale jestem pewien, że twoje rozwiązanie pomoże tym, którzy również mają ten problem w przyszłości! – Aaron

+2

Wybrałem tę ścieżkę również pierwotnie, ALE nie mogłem złapać błędów mysql (jak próba wstawienia duplikatu klucza) i to spowodowałoby, że mój program zostałby przerwany, więc poszedłem za przykładem miejsca, w którym się opuściłeś (skorzystałem z rozwiązania z kroku 1 [lokalizacja plików lib]). –

1

Musisz zainstalować kolektor (dev) plików, zakładam jeden z nich:

apt-cache search mysql 
... 
libmysqlclient-dev - MySQL database development files 
libmysqlclient16 - MySQL database client library 
libmysql++-dev - MySQL C++ library bindings (development) 
libmysqlcppconn-dev - MySQL Connector for C++ (development files) 
... 

--with-mysql-lib nie powinno być konieczne, ponieważ pliki zostaną zainstalowane w domyślnych lokalizacjach.

+0

libmysqlclient16 -> To jest ten, który powinieneś zainstalować –

+0

OK, mówi "E: Nie można zlokalizować pakietu libmysqlclient16", gdy próbuję apt-get install libmysqlclient16. Nie jestem bardzo zaznajomiony z linuxem, czy muszę ręcznie pobrać to? – Aaron

+1

Wypróbuj 'apt-cache search mysql', aby wyszukać dostępne biblioteki. – Thor