Написал CGI приложение на C для обращение к MySQL (4.0.12). Скомпилировал всё замечательно, без косяков. Но при выполнении сервер в логи пишет ошибку: /usr/libexec/ld-elf.so.1: Shared object "libmysqlclient.so.10" not found
Я нашел эту библиатеку и забросил её в /usr/local/lib/
После чего ошибка исчезла, но появилась другая:
/usr/libexec/ld-elf.so.1: AHW_Scripts.cgi: Undefined symbol "mysql_connect"
В чём могут быть проблемы?ОС FreeBSD 4.4
>Написал CGI приложение на C для обращение к MySQL (4.0.12). Скомпилировал всё
>замечательно, без косяков. Но при выполнении сервер в логи пишет ошибку:
> /usr/libexec/ld-elf.so.1: Shared object "libmysqlclient.so.10" not found
>Я нашел эту библиатеку и забросил её в /usr/local/lib/
>После чего ошибка исчезла, но появилась другая:
>/usr/libexec/ld-elf.so.1: AHW_Scripts.cgi: Undefined symbol "mysql_connect"
>В чём могут быть проблемы?
>
>ОС FreeBSD 4.4Не нужно никуда забрасывать эту библиотеку, просто установи mysql-devel пакет, все само попадет туда, куда нужно. Потом, если этого не произойдет при инсталляции, зарегестрируй .so-шки в системе, man ld. Обнови ld хэш.
Все должно пройти как по маслу.удачи.
>>Написал CGI приложение на C для обращение к MySQL (4.0.12). Скомпилировал всё
>>замечательно, без косяков. Но при выполнении сервер в логи пишет ошибку:
>> /usr/libexec/ld-elf.so.1: Shared object "libmysqlclient.so.10" not found
>>Я нашел эту библиатеку и забросил её в /usr/local/lib/
>>После чего ошибка исчезла, но появилась другая:
>>/usr/libexec/ld-elf.so.1: AHW_Scripts.cgi: Undefined symbol "mysql_connect"
>>В чём могут быть проблемы?
>>
>>ОС FreeBSD 4.4
>
>Не нужно никуда забрасывать эту библиотеку, просто установи mysql-devel пакет, все само
>попадет туда, куда нужно. Потом, если этого не произойдет при инсталляции,
>зарегестрируй .so-шки в системе, man ld. Обнови ld хэш.
>Все должно пройти как по маслу.
>
>удачи.Спасибо ,попробую. Хотя у меня этот скрипт уже работал, систему не переставлял, а всего лишь перегружал.
Что то я не нашел под free bsd mysql-devel, он вообще в природе существует.
У меня в системе существует несколько экземпляров libmysqlclient.so.10.
Попробовал в опциях gcc указывать пути к этим so-шкам, но прога перестала линкером собираться, в то время как ошибка в логах сервера про неизвестный метод "mysql_connect" пропала.
У меня сложилось впечатление, что когда я компилил прогу с одними путями, линкер видел эту функцию, а когда вызывалась CGI-программа, то апач цеплял другую libmysqlclient.so.10, в которой этой функции нет.
Посоветуйте, какие действия еще можно предпринять?
Самое интересное, что эта cgi-ка уже работала, работы в этом направлении временно свернули, а после перезагрузки системы все перестало работать.
>Попробовал в опциях gcc указывать пути к этим so-шкам, но прога перестала
>линкером собираться, в то время как ошибка в логах сервера про
>неизвестный метод "mysql_connect" пропала.
извиняюсь, мысль недовыразил: понятно, проги то нет, выполняться нечему
Стала появляться сообщение об отсутствии "mysql_connect" при линковании.
>
>>Попробовал в опциях gcc указывать пути к этим so-шкам, но прога перестала
>>линкером собираться, в то время как ошибка в логах сервера про
>>неизвестный метод "mysql_connect" пропала.
>извиняюсь, мысль недовыразил: понятно, проги то нет, выполняться нечему
>Стала появляться сообщение об отсутствии "mysql_connect" при линковании.
попробуй mysql_real_connect. Была такая же проблема, решил её только так.MYSQL mysql;
// Устанавливаем постоянное соединение с MySQL
mysql_init(&mysql);
if(!mysql_real_connect(&mysql, SQL_HOST, SQL_USER, SQL_PASSWORD, SQL_DB, 0, NULL, 0))
{
printf("Не удалось соедениться с базой данных. Ошибка: %s", mysql_error(&mysql));return -1;
}
//
>>
>>>Попробовал в опциях gcc указывать пути к этим so-шкам, но прога перестала
>>>линкером собираться, в то время как ошибка в логах сервера про
>>>неизвестный метод "mysql_connect" пропала.
>>извиняюсь, мысль недовыразил: понятно, проги то нет, выполняться нечему
>>Стала появляться сообщение об отсутствии "mysql_connect" при линковании.
>попробуй mysql_real_connect. Была такая же проблема, решил её только так.
>
>MYSQL mysql;
>
>// Устанавливаем постоянное соединение с MySQL
>mysql_init(&mysql);
>if(!mysql_real_connect(&mysql, SQL_HOST, SQL_USER, SQL_PASSWORD, SQL_DB, 0, NULL, 0))
>{
> printf("Не удалось соедениться с базой данных. Ошибка: %s", mysql_error(&mysql));
>
>
> return -1;
>}
>//
Спасибо, я уже так и сделал. Все заработало. Глянул исходники mysql, а там условная компиляция на методе mysql_connect стоит и написано, что это типа старый вариант.
Просто интересно было почему не работает, ведь эта прога работала 3 месяца назад, до перегрузки системы.
Я грепом глянул несколько версий libmysqlclient.so.10 и она нашла mysql_connect в той, которая по указанным мной путям лежит, поэтому то и компилится, но когда прога исполнялась под апачем, брал он другую версию, в которой этой функции нет.
>mysql_real_connect(&mysql, SQL_HOST, SQL_USER, SQL_PASSWORD, SQL_DB, 0, NULL, 0)Спасибо! Весь день искал, где собака порылась.
>Написал CGI приложение на C для обращение к MySQL (4.0.12). Скомпилировал всё
>замечательно, без косяков. Но при выполнении сервер в логи пишет ошибку:
> /usr/libexec/ld-elf.so.1: Shared object "libmysqlclient.so.10" not found
>Я нашел эту библиатеку и забросил её в /usr/local/lib/
>После чего ошибка исчезла, но появилась другая:
>/usr/libexec/ld-elf.so.1: AHW_Scripts.cgi: Undefined symbol "mysql_connect"
>В чём могут быть проблемы?
>
>ОС FreeBSD 4.4ldconfig -r | head -2
ldconfig -r | grep mysql
+ присутствует ли в /usr/local/etc/rc.d скрипт 000.mysql-client.sh и имеет ли он исполняемый бит ?
>>Написал CGI приложение на C для обращение к MySQL (4.0.12). Скомпилировал всё
>>замечательно, без косяков. Но при выполнении сервер в логи пишет ошибку:
>> /usr/libexec/ld-elf.so.1: Shared object "libmysqlclient.so.10" not found
>>Я нашел эту библиатеку и забросил её в /usr/local/lib/
>>После чего ошибка исчезла, но появилась другая:
>>/usr/libexec/ld-elf.so.1: AHW_Scripts.cgi: Undefined symbol "mysql_connect"
>>В чём могут быть проблемы?
>>
>>ОС FreeBSD 4.4
>
>ldconfig -r | head -2
>ldconfig -r | grep mysql
>+ присутствует ли в /usr/local/etc/rc.d скрипт 000.mysql-client.sh и имеет ли он исполняемый
>бит ?/tmp/apache > ldconfig -r | head -2
/var/run/ld-elf.so.hints:
search directories: /usr/lib/mysql:/usr/local/lib/mysql
/tmp/apache > cd /usr/local/lib/mysql
/usr/local/lib/mysql > grep mysql_connect *
Binary file libmysqlclient.a matches
Binary file libmysqlclient.so.10 matches
/usr/local/lib/mysql > ldconfig -r | grep mysql
search directories: /usr/lib/mysql:/usr/local/lib/mysql
0:-lmysqlclient.10 => /usr/lib/mysql/libmysqlclient.so.10
1:-lmysqlclient.12 => /usr/lib/mysql/libmysqlclient.so.12
2:-lmysqlclient.10 => /usr/local/lib/mysql/libmysqlclient.so.10
Как видно, mysql_connect в этих библиотеках присутствует, но подключается библиотека хрен пойми откуда.
Или grep mysql_connect *
Binary file libmysqlclient.a matches
Binary file libmysqlclient.so.10 matches
еще не говорит о том, что все будет вызываться?