MySQL - что-то непонятное с библиотеками (Установить-то установила, а программировать-то как?)

Модератор: Модераторы разделов

Мартышка
Сообщения: 29
ОС: Винда и Мандрива 8.0

MySQL - что-то непонятное с библиотеками

Сообщение Мартышка »

Здравствуйте! Я - совершеннейший новичок в Линуксе! Вот уже долгое время борюсь с MySQL-ем - и пока существенный перевес на его стороне.
Вчера наконец-таки удалось подключиться к нему. Все здорово работает - это очень радует. Но этого мало! Надо научиться общаться с ним из Си.
Итак, у меня Мандрива 2008 (free). И ставила mysql я при помощи "urpmi mysql".
Вот гляжу сюда:
http://linux.yaroslavl.ru/docs/www/mysql/d...ld_example.html
И вижу, что нужен мне файл mysql.h (у меня такого нету). Значит, требуется какую-нибудь библиотеку поставить. И вот как раз с этим-то у меня и проблема! Где ее взять? Как ставить? Куда?
Пожалуйста!! Помогите!!! :)
Спасибо сказали:
Аватара пользователя
dey
Сообщения: 335
ОС: OpenSuse 11.1

Re: MySQL - что-то непонятное с библиотеками

Сообщение dey »

Можно в документации посмотреть , например тут
В сознательных действиях должен присутствовать существенный неалгоритмический компонент.
Roger Penrose,The Emperor's New Mind
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: MySQL - что-то непонятное с библиотеками

Сообщение Assuri »

В репозитрии Debian есть вот такой пакет:

Код: Выделить всё

libmysql++-dev - mysql C++ library bindings (development)

Может и в Мандриве есть....
Спасибо сказали:
Аватара пользователя
dey
Сообщения: 335
ОС: OpenSuse 11.1

Re: MySQL - что-то непонятное с библиотеками

Сообщение dey »

Для мандривы libmysqlpp-devel или libsqlplus1-devel для старых версий, судя по описанию обоих пакетов :
package contains static libraries and headers of MySQL++ which are
useful when you develop or compile any applications/libraries using
MySQL C++ interface
В сознательных действиях должен присутствовать существенный неалгоритмический компонент.
Roger Penrose,The Emperor's New Mind
Спасибо сказали:
Мартышка
Сообщения: 29
ОС: Винда и Мандрива 8.0

Re: MySQL - что-то непонятное с библиотеками

Сообщение Мартышка »

Я выполнила:
"urpmi libmysqlpp-devel"
Что-то долго устанавливалось после чего файлик mysql.h нашелся (добрый признак). Обнадеженная таким результатом, я попробовала-таки скомпилировать пример http://linux.yaroslavl.ru/docs/www/mysql/d...ld_example.html
Но, к сожалению, у меня не оказалось ни lmysqld ни lmysqlclient.
Как следствие, пример, увы, не компилируется. Может, мне чего-нибудь еще установить для полного счастья? :)
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: MySQL - что-то непонятное с библиотеками

Сообщение Assuri »

Мартышка писал(а):
08.11.2007 00:10
Я выполнила:
"urpmi libmysqlpp-devel"
Что-то долго устанавливалось после чего файлик mysql.h нашелся (добрый признак). Обнадеженная таким результатом, я попробовала-таки скомпилировать пример http://linux.yaroslavl.ru/docs/www/mysql/d...ld_example.html
Но, к сожалению, у меня не оказалось ни lmysqld ни lmysqlclient.
Как следствие, пример, увы, не компилируется. Может, мне чего-нибудь еще установить для полного счастья? :)

Как компилируете? По-моему там надо ключик добавлять -lmysql[ld]. Попробуйте.
Спасибо сказали:
Аватара пользователя
dey
Сообщения: 335
ОС: OpenSuse 11.1

Re: MySQL - что-то непонятное с библиотеками

Сообщение dey »

Мартышка писал(а):
08.11.2007 00:10
Я выполнила:
"urpmi libmysqlpp-devel"
Что-то долго устанавливалось после чего файлик mysql.h нашелся (добрый признак). Обнадеженная таким результатом, я попробовала-таки скомпилировать пример http://linux.yaroslavl.ru/docs/www/mysql/d...ld_example.html
Но, к сожалению, у меня не оказалось ни lmysqld ни lmysqlclient.
Как следствие, пример, увы, не компилируется. Может, мне чего-нибудь еще установить для полного счастья? :)


Я же приводил ссылку. Конкретно здесь и еще тут
В сознательных действиях должен присутствовать существенный неалгоритмический компонент.
Roger Penrose,The Emperor's New Mind
Спасибо сказали:
Мартышка
Сообщения: 29
ОС: Винда и Мандрива 8.0

Re: MySQL - что-то непонятное с библиотеками

Сообщение Мартышка »

dey писал(а):
08.11.2007 10:36
Я же приводил ссылку. Конкретно здесь и еще тут

О, да!!! Заработало!!! (Оказывается, я не умею кавычки правильные ставить). СПАСИБО!!!!!

Реально не представляю, что бы я без вашей помощи делала!!! Не знаю, как и благодарить!!!
Спасибо сказали:
Мартышка
Сообщения: 29
ОС: Винда и Мандрива 8.0

Re: MySQL - что-то непонятное с библиотеками

Сообщение Мартышка »

Снова здравствуйте!
У меня теперь возникла новая проблема - надо писать не на СИ, а на С++.
Раньше я компилировала простейший пример вот так вот:

Код:

CFG=/usr/bin/multiarch-i386-linux/mysql_config sh -c "gcc -o testlib_mysql `$CFG --cflags` testlib_mysql.c `$CFG --libs`"

А как мне быть теперь? Что-то не понимаю, чего мне читать, чтобы это понять :)
Вычитала, что у меня должны быть установлены простейшие примеры программ и мэйкфайлов. Программы есть, но, увы, ни одного мэйкфайла я не нашла.
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: MySQL - что-то непонятное с библиотеками

Сообщение Uncle_Theodore »

Теперь можно просто заменить "gcc" на "g++"
Не совсем понятно, зачем Вам "sh -c", но дрпустим. Хуже не будет.

Простейший Makefile для Вашего случая будет выглядеть вот так

Код: Выделить всё

CFG=/usr/bin/multiarch-i386-linux/mysql_config
all:
          g++ -o testlib_mysql `$CFG --cflags` testlib_mysql.c `$CFG --libs`

Третья строчка начинается с таба -- это обязательно!
Спасибо сказали:
Мартышка
Сообщения: 29
ОС: Винда и Мандрива 8.0

Re: MySQL - что-то непонятное с библиотеками

Сообщение Мартышка »

Uncle_Theodore писал(а):
12.11.2007 23:34
Теперь можно просто заменить "gcc" на "g++"
Не совсем понятно, зачем Вам "sh -c", но дрпустим. Хуже не будет.

Простейший Makefile для Вашего случая будет выглядеть вот так

Код: Выделить всё

CFG=/usr/bin/multiarch-i386-linux/mysql_config
all:
          g++ -o testlib_mysql `$CFG --cflags` testlib_mysql.c `$CFG --libs`

Третья строчка начинается с таба -- это обязательно!


Ой, нет... боюсь, такой вариант не работает. В программе мне придется использовать библиотеку mysql++.h вместо mysql.h. Вообще-то таким образом (без замены на g++) не работает даже с Си-шными библиотеками.
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: MySQL - что-то непонятное с библиотеками

Сообщение Uncle_Theodore »

Угум. Это я немного ступил. :)
Посмотрите, какие опции есть у /usr/bin/multiarch-i386-linux/mysql_config
Что-то типа --cxxflags или --cppflags должно быть.
И поставьте это на место --cflags
Спасибо сказали:
Мартышка
Сообщения: 29
ОС: Винда и Мандрива 8.0

Re: MySQL - что-то непонятное с библиотеками

Сообщение Мартышка »

Uncle_Theodore писал(а):
13.11.2007 00:17
Угум. Это я немного ступил. :)
Посмотрите, какие опции есть у /usr/bin/multiarch-i386-linux/mysql_config
Что-то типа --cxxflags или --cppflags должно быть.
И поставьте это на место --cflags

Код:

--cflags [-I/usr/include/mysql -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4 -fexceptions -fomit-frame-pointer -march=i586 -mtune=generic -fasynchronous-unwind-tables -fstack-protector-all -fPIC -fstack-protector] --include [-I/usr/include/mysql] --libs [-L/usr/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -L/usr/lib -lssl -lcrypto] --libs_r [-L/usr/lib/mysql -lmysqlclient_r -lz -lpthread -lcrypt -lnsl -lm -lpthread -L/usr/lib -lssl -lcrypto] --socket [/var/lib/mysql/mysql.sock] --port [3306] --version [5.0.45] --libmysqld-libs [-L/usr/lib/mysql -lmysqld -lz -lpthread -lcrypt -lnsl -lm -lpthread -lrt -L/usr/lib -lssl -lcrypto]

Что-то не видать... :) Да?
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: MySQL - что-то непонятное с библиотеками

Сообщение Uncle_Theodore »

Хым-хым-хым...
То, что выдается при вызове с --cflags не выглядит слишком уж относящимся к C...
А где находится эта mysql++.h, в какой директории? Если в /usr/include/mysql, то все равно должно работать. Что именно не получается?
Спасибо сказали:
Мартышка
Сообщения: 29
ОС: Винда и Мандрива 8.0

Re: MySQL - что-то непонятное с библиотеками

Сообщение Мартышка »

Uncle_Theodore писал(а):
13.11.2007 00:27
Хым-хым-хым...
То, что выдается при вызове с --cflags не выглядит слишком уж относящимся к C...
А где находится эта mysql++.h, в какой директории? Если в /usr/include/mysql, то все равно должно работать. Что именно не получается?

Ну, не совсем там...
/usr/include/mysql++/mysql++.h
Если я беру канонический примерчик, написанный на С++ (они у меня есть) и пытаюсь его компилировать подобным образом, как я компилировала программы на Си, то он начинает обижаться - говорит, что не находит никакие библиотеки...

Код:

prog.cpp:1:18: error: util.h: Нет такого файла или каталога prog.cpp:3:21: error: mysql++.h: Нет такого файла или каталога

Так что наталкивает на мысль, что как-то по-другому надо это делать. Самое обидное, что в руководстве по mysql подробно рассказано про Си, а про С++ отсылают в другое место, где про компиляцию упоминают только в том ключе, что примерчики с мэйкфайлами должны у меня быть (я проверила - их нет :)).
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: MySQL - что-то непонятное с библиотеками

Сообщение Uncle_Theodore »

Оки-доки, тогда давайте вот так попробуем

Код: Выделить всё

CFG=/usr/bin/multiarch-i386-linux/mysql_config
all:
          g++ -o testlib_mysql `$CFG --cflags` -I/usr/include/mysql++ testlib_mysql.c `$CFG --libs`

Или. Можно в заголовке программы писать
#include <mysql++/mysql++.h>

Кстати, а для либов тоже есть отдельная директория, как и для заголовков? Тогда ее через -L можно указать.
Спасибо сказали:
Мартышка
Сообщения: 29
ОС: Винда и Мандрива 8.0

Re: MySQL - что-то непонятное с библиотеками

Сообщение Мартышка »

Uncle_Theodore писал(а):
13.11.2007 00:56
Оки-доки, тогда давайте вот так попробуем

Код: Выделить всё

CFG=/usr/bin/multiarch-i386-linux/mysql_config
all:
          g++ -o testlib_mysql `$CFG --cflags` -I/usr/include/mysql++ testlib_mysql.c `$CFG --libs`

Или. Можно в заголовке программы писать
#include <mysql++/mysql++.h>

Кстати, а для либов тоже есть отдельная директория, как и для заголовков? Тогда ее через -L можно указать.


Ой, я тут сперва накосячила...
Сейчас во всех файлах поправила местонахождение mysql++.h...
Но при компиляции выдает кучу ошибок - видимо, нужны какие-то еще библиотеки указать действительно...
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: MySQL - что-то непонятное с библиотеками

Сообщение Uncle_Theodore »

Покажите хоть, какие ошибки выдает...
Спасибо сказали:
Мартышка
Сообщения: 29
ОС: Винда и Мандрива 8.0

Re: MySQL - что-то непонятное с библиотеками

Сообщение Мартышка »

Не понимает ни одной функции, связанной с БД.
Вот кусочек:

Код:

/home/martyshka/prog/test_libmysqld/prog++/prog.cpp:18: undefined reference to `mysqlpp::Connection::Connection(bool)' /home/martyshka/prog/test_libmysqld/prog++/prog.cpp:19: undefined reference to `connect_to_db(int, char**, mysqlpp::Connection&, char const*)' /home/martyshka/prog/test_libmysqld/prog++/prog.cpp:24: undefined reference to `mysqlpp::Connection::query()' /home/martyshka/prog/test_libmysqld/prog++/prog.cpp:34: undefined reference to `mysqlpp::Row::at(unsigned int) const' /home/martyshka/prog/test_libmysqld/prog++/prog.cpp:34: undefined reference to `mysqlpp::operator<<(std::basic_ostream<char, std::char_traits<char> >&, mysqlpp::ColData_Tmpl<mysqlpp::const_string> const&)'
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: MySQL - что-то непонятное с библиотеками

Сообщение Uncle_Theodore »

Попробуйте добавить к строчке
g++ -o testlib_mysql `$CFG --cflags` -I/usr/include/mysql++
(или к команде компиляции) вот такую вещь:

-lmysqlpp

То есть
g++ -o testlib_mysql `$CFG --cflags` -I/usr/include/mysql++ -lmysqlpp

Что получится?
Спасибо сказали:
Мартышка
Сообщения: 29
ОС: Винда и Мандрива 8.0

Re: MySQL - что-то непонятное с библиотеками

Сообщение Мартышка »

Uncle_Theodore писал(а):
13.11.2007 01:57
Попробуйте добавить к строчке
g++ -o testlib_mysql `$CFG --cflags` -I/usr/include/mysql++
(или к команде компиляции) вот такую вещь:

-lmysqlpp

То есть
g++ -o testlib_mysql `$CFG --cflags` -I/usr/include/mysql++ -lmysqlpp

Что получится?

Ошибок гораздо меньше!!! ГОРАЗДО!!!!
undefined reference to `connect_to_db(int, char**, mysqlpp::Connection&, char const*)'
collect2: выполнение ld завершилось с кодом возврата 1
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: MySQL - что-то непонятное с библиотеками

Сообщение Uncle_Theodore »

А что Вы, собственно, компилируете? Можно взглянуть?
Вот тут есть две ссылочки на похожую тему
http://forums.mysql.com/read.php?45,160246,160246
http://lists.mysql.com/plusplus/6136
Спасибо сказали:
Мартышка
Сообщения: 29
ОС: Винда и Мандрива 8.0

Re: MySQL - что-то непонятное с библиотеками

Сообщение Мартышка »

Uncle_Theodore писал(а):
13.11.2007 02:17
А что Вы, собственно, компилируете? Можно взглянуть?
Вот тут есть две ссылочки на похожую тему
http://forums.mysql.com/read.php?45,160246,160246
http://lists.mysql.com/plusplus/6136

Вот ровно эти файлы и компилирую!!! Прям, они и есть!
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: MySQL - что-то непонятное с библиотеками

Сообщение Uncle_Theodore »

Мартышка писал(а):
13.11.2007 02:23
Вот ровно эти файлы и компилирую!!! Прям, они и есть!

Видимо, тогда имеет смысл попробовать последовать вот этому совету
http://lists.mysql.com/plusplus/6136
Those examples were made to work with a util library that is built with the
examples, so thats is why you get undefined symbols, i think the library
source filename is util.cpp or something like it, compile it first and link
it to your code.

Эим примеры были созданы для работы с библиотекой util, которая создается вместе с примерами, и именно поэтому Вы получаете неразрешенные символы. Я думаю (он думает), что исходники библиотеки находятся в файле util.cpp или что-то в этом роде, скомпилируйте их первыми и слинкуйте со своим кодом.
Спасибо сказали:
Мартышка
Сообщения: 29
ОС: Винда и Мандрива 8.0

Re: MySQL - что-то непонятное с библиотеками

Сообщение Мартышка »

Все :) Я понимаю, что плохо быть бестолковой!!! :) Кажется, у меня получилось... Главное - не дышать :)
Спасибо сказали:
Мартышка
Сообщения: 29
ОС: Винда и Мандрива 8.0

Re: MySQL - что-то непонятное с библиотеками

Сообщение Мартышка »

Код:

CFG=/usr/bin/multiarch-i386-linux/mysql_config g++ -c util.cpp `$CFG --cflags` -I/usr/include/mysql++ g++ -c simple2.cpp `$CFG --cflags` -I/usr/include/mysql++ g++ -o prog simple2.o util.o -lmysqlpp


Uncle_Theodore!!!!
СПАААСИИИИИБОООООООООО!!!!!!!!!!!!!!!!!!!!!!!!!
Спасибо сказали: