The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"MySQL и СИ (подключение библиотеки)"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"MySQL и СИ (подключение библиотеки)"  +/
Сообщение от Andery email(ok) on 27-Янв-12, 17:39 
Здравствуйте. Стоит система FreeBSD.
Сейчас разбираюсь с MySQL.
Пишу свой модуль для netgraph. Пытаюсь подключиться к БД.
Весь код программы приводить не буду, приведу только код ответственный за подключение к БД:

MYSQL *pdb;
char *server ="localhost";
char *user = "user";
char *password = "pass";
char *database ="base";
...
pdb = mysql_init(NULL);
if (!mysql_real_connect (pdb,server,user,password,database,0,NULL,0))
{printf("ERROR");
}
...

Компиляция проходит без проблем.
make -C /usr/src/sys/modules/netgraph/

===> ip(all)
Warning: Object directory not changed from original /usr/src/sys/modules/netgraph/ip
@ -> /usr/src/sys
machine -> /usr/src/sys/i386/include
:> opt_netgraph.h
cc -O2 -pipe -fno-strict-aliasing -Werror -D_KERNEL -DKLD_MODULE -nostdinc   -I. -I@ -I@/contrib/altq -finline-limit=8000 --param inline-unit-growth=100 --param large-function-growth=1000 -fno-common  -mno-align-long-strings -mpreferred-stack-boundary=2  -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3 -ffreestanding -fstack-protector -std=iso9899:1999 -fstack-protector -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes  -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual  -Wundef -Wno-pointer-sign -fformat-extensions -c  /usr/src/sys/modules/netgraph/ip/../../../netgraph/ng_ip.c

cc -O2 -pipe -fno-strict-aliasing -Werror -D_KERNEL -DKLD_MODULE -nostdinc   -I. -I@ -I@/contrib/altq -finline-limit=8000 --param inline-unit-growth=100 --param large-function-growth=1000 -fno-common  -mno-align-long-strings -mpreferred-stack-boundary=2  -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3 -ffreestanding -fstack-protector -std=iso9899:1999 -fstack-protector -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes  -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual  -Wundef -Wno-pointer-sign -fformat-extensions -c  /usr/src/sys/modules/netgraph/ip/../../../net/slcompress.c
ld  -d -warn-common  -r -d -o ng_ip.kld ng_ip.o slcompress.o
:> export_syms
awk -f /usr/src/sys/modules/netgraph/ip/../../../conf/kmod_syms.awk ng_ip.kld  export_syms | xargs -J% objcopy % ng_ip.kld
ld -Bshareable  -d -warn-common  -o ng_ip.ko ng_ip.kld
objcopy --strip-debug ng_ip.ko

При попытки загрузки модуля пишется ошибка:
link_elf: symbol mysql_init undefined.

Если в
cc -O2 -pipe -fno-strict-aliasing -Werror -D_KERNEL -DKLD_MODULE -nostdinc   -I. -I@ -I@/contrib/altq -finline-limit=8000 --param inline-unit-growth=100 --param large-function-growth=1000 -fno-common  -mno-align-long-strings -mpreferred-stack-boundary=2  -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3 -ffreestanding -fstack-protector -std=iso9899:1999 -fstack-protector -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes  -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual  -Wundef -Wno-pointer-sign -fformat-extensions -c  /usr/src/sys/modules/netgraph/ip/../../../netgraph/ng_ip.c

добавить -L/usr/local/lib/mysql -lmysqlclient, то при компиляции пишет:
cc: -lmysqlclient: linker input file unused because linking not done

Подскажите, как правильно подключить библиотеку libmysqlclient и нужно ли еще подключать какие-нибудь библиотеки.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "MySQL и СИ (подключение библиотеки)"  +/
Сообщение от arka on 28-Янв-12, 10:36 
Либу надо подключать при линковке, а не при компиляции
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "MySQL и СИ (подключение библиотеки)"  +/
Сообщение от Andery email(ok) on 28-Янв-12, 16:04 
> Либу надо подключать при линковке, а не при компиляции

Спасибо за ответ.
Я так понял, что вместо
ld  -d -warn-common  -r -d -o ng_ip.kld ng_ip.o slcompress.o
нужно делать так
ld  -d -warn-common  -r -d -o ng_ip.kld ng_ip.o slcompress.o -L/usr/local/lib/mysql -lmysqlclient
После этого, при попытки загрузки модуля пишется ошибка:
link_elf: symbol atoi undefined.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

2. "MySQL и СИ (подключение библиотеки)"  +/
Сообщение от PavelR (??) on 28-Янв-12, 13:50 
> Здравствуйте. Стоит система FreeBSD.
> Сейчас разбираюсь с MySQL.
> Пишу свой модуль для netgraph. Пытаюсь подключиться к БД.

Ниже суровое IMHO, я не разработчик:

Увы и ой, нифига не получится у вас: модуль работает в ядре, а библиотеки - на пользовательском уровне.

Вариантов у вас три:

1) Забить :-) (да, не вариант :-)
2) Написать ядерную реализацию модуля libmysql
3) Реализовать правильно: даймон в юзерспейсе и коммуникация с модулем ядра, получение инфы и складирование в БД

4) Возможно пройдет вариант со статической линковкой к модулю библиотеки libmysqlclient но думаю что много еще открытий ждет вас на этом нелегком пути.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "MySQL и СИ (подключение библиотеки)"  +/
Сообщение от Andery email(ok) on 28-Янв-12, 16:01 
>[оверквотинг удален]
> Увы и ой, нифига не получится у вас: модуль работает в ядре,
> а библиотеки - на пользовательском уровне.
> Вариантов у вас три:
> 1) Забить :-) (да, не вариант :-)
> 2) Написать ядерную реализацию модуля libmysql
> 3) Реализовать правильно: даймон в юзерспейсе и коммуникация с модулем ядра, получение
> инфы и складирование в БД
> 4) Возможно пройдет вариант со статической линковкой к модулю библиотеки libmysqlclient
> но думаю что много еще открытий ждет вас на этом нелегком
> пути.

Спасибо за ответ.
Жаль, что не получится.
Насчет вариантов:
1 и 2 не подходит :)
3. Есть ли почитать что-нибудь на эту тему?
4. Для статической линковки нужно добавить параметр -static?

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "MySQL и СИ (подключение библиотеки)"  +/
Сообщение от cryo (ok) on 28-Янв-12, 18:56 
> Спасибо за ответ.
> Жаль, что не получится.
> Насчет вариантов:
> 1 и 2 не подходит :)
> 3. Есть ли почитать что-нибудь на эту тему?
> 4. Для статической линковки нужно добавить параметр -static?

Вариант 3 IMHO - самый кошерный.

Организовать коммуникацию модуля ядра с демоном, пишущим в базу можно разными способами, самые простые:
- через собственный syscall, который будет регистрировать ваш ядреный модуль
- через unix-сокет
- через tcp/udp-сокет (тогда можно и на другую машину данные лить :)

Протокол общения можете придумать любой собственный, какой вам подходит для задачи, вплоть до передачи простых заполненной данными C-структуры.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "MySQL и СИ (подключение библиотеки)"  +/
Сообщение от PavelR (??) on 29-Янв-12, 00:27 
> 3. Есть ли почитать что-нибудь на эту тему?

Исходники ng_ipacct / netams.


Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру