Настройка Mysql ++ в Linux

83
7

Я хочу подключиться к базе данных mysql с С++ в Linux. На моем локальном компьютере я запускаю Ubuntu и устанавливаю серверы и клиентские пакеты mysql:


sudo apt-get install mysql-server mysql-client



Я столкнулся с Mysql++, но у вас возникли некоторые проблемы при запуске. /configure из их двоичного пакета. Ошибка говорит:


проверка каталога библиотеки MySQL... configure: ошибка: не нашел библиотеку mysqlclient в '/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 '



Я вижу, где я могу использовать эту команду, чтобы указать путь:


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



, но я не знаю, где его указать. Я использовал whereis mysql, но не могу найти какой-либо каталог mysql, который содержит подкаталог lib. Где будут установлены библиотеки mysqlclient?


EDIT:


После определения местоположения libmysqlclient я вернулся


/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/доли/DOC/libmysqlclient18
/usr/share/doc/libmysqlclient18/changelog.Debian.gz
/USR/доли/DOC/libmysqlclient18/авторское право
/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



Итак, я попробовал ./configure --with-mysql-lib=/usr/lib/i386-linux-gnu и, похоже, не стал жаловаться.


Хотя это решает проблему получения. /configure для завершения, у меня все еще есть дополнительные проблемы. Когда я запускаю make, все идет хорошо до этой точки:


В файле, включенном из. /lib/sql _buffer.h:31:0,                  from./lib/sql_buffer.cpp:26:./lib/refcounted.h:258:2: ошибка: 'size_t не называет тип. /lib/refcounted.h: В конструкторе mysqlpp:: RefCountedPointer:: RefCountedPointer():./lib/refcounted.h:89:2: error: class 'mysqlpp:: RefCountedPointer не имеет поле с именем 'refs_./lib/refcounted.h: В конструкторе "Mysqlpp:: RefCountedPointer:: RefCountedPointer (T *):. /lib/refcounted.h:100:2: ошибка: class 'mysqlpp:: RefCountedPointer не имеет поля с именем' refs_. /lib/refcounted.h:104:4: ошибка: 'refs_ не был объявлен в этом scope./lib/refcounted.h:104:16: ошибка: ожидаемый тип-спецификатор до 'Size_t./lib/refcounted.h:104:16: error: expected'; до 'Size_t./lib/refcounted.h: В конструкторе" Mysqlpp:: RefCountedPointer:: RefCountedPointer (Const ThisType &):./lib/refcounted.h:112:2: ошибка: класс 'Mysqlpp:: RefCountedPointer не имеет поля named 'refs_./lib/refcounted.h:115:8: error:' refs_ was not объявлено в этой области. /lib/refcounted.h: В деструкторе "Mysqlpp:: RefCountedPointer:: ~ RefCountedPointer():. /lib/refcounted.h:125:7: ошибка: 'refs_ не был объявлен в этом scope./lib/refcounted.h: В функции-члена 'void mysqlpp:: RefCountedPointer:: swap (mysqlpp:: RefCountedPointer:: ThisType &):./lib/refcounted.h:246:13: error: 'refs_ was не объявленные в этой области, make: *** [mysqlpp_sql_buffer.o] Ошибка 1



Я не очень хорошо знаком с С++, поэтому я не уверен, что именно означает ошибка. Любая помощь или руководство по настройке Mysql ++ с этой точки зрения было бы очень оценено. Хотя, я признаю, что я также начинаю искать альтернативные библиотеки для использования.

спросил(а) 2012-06-01T14:38:00+04:00 7 лет, 6 месяцев назад
2
Решение
95

эта проблема вызвана тем, что size_t зависит от включения пространства имен stddef перед вызовом в файлах конфигурации (make).


У меня была та же самая проблема (с использованием облачного сервера amazon EC2 ubuntu 12.04) и решил ее, отредактировав файл-нарушитель (sql_buffer.cpp, расположенный в моем случае, /home/ubuntu/mysql ++-3.1.0/lib) и включая stddef (в то же время перемещая пространство имен строк вверх):


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

на ваш вопрос отвечает эта коррекция. НО, у вас могут быть дополнительные проблемы, как и я. поэтому я объясню, как я решил некоторые последующие проблемы, которые вы могли бы или не могли бы также иметь.


вам может понадобиться


sudo chown username sql_buffer.cpp

чтобы иметь возможность редактировать файл, в зависимости от настройки вашей установки (например, пользователь ubuntu).


i затем столкнулся с другой проблемой:


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

поэтому я отредактировал файл-нарушитель (genv2.cpp) и включил пространство имен строк


#include <string.h>

то у меня была ДРУГОЕ проблема с:


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

я мог бы отредактировать Makefile.in, но решил просто запустить в командной строке:


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

i затем продолжил процесс make.


который работал у меня: mysql ++ установлен и запущен.

ответил(а) 2012-10-11T17:42:00+04:00 7 лет, 1 месяц назад
Еще 1 ответ
45

Вам нужно установить файлы header (dev), я предполагаю, что один из них:


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 не обязательно, потому что файлы будут установлены в местах по умолчанию.

ответил(а) 2012-06-01T14:42:00+04:00 7 лет, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема