SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 09.05.2007 14:22:45

Golova
Завсегдатай
Зарегистрирован: 23.03.2007
Сообщений: 92

проблема с 'C API ' клиентом

segmentation fault на функции mysql_real_connect.

обычно компилирую под linux(CentOS 4) сие приложение  c libmysqlclient_r.a статически, с появлением проблемы пробовал и с libmysqlclient_r.so (libmysqlclient.so.15.0.0), до этого случая слинкованый клиент с 5.0 библиотеками работал потом и на 4.1 сервере(в том числе и shared линкованый, просто нужно было создать линк на требуемую библиотеку)

фиг с ним shared (.so), этот способ я пробовал уже от безисходности.
Самый жирный вопрос в том, почему вылетает статически слинкованый клиент?
использую клиента на 'C API ' уже около пару лет и никаких проблем не наблюдалось, компилирую у себя локально, заливаю на удаленный сервер (при этом дистрибутивы разные, только что ветки совпадают) и никаких проблем. А тут....
Могу понять почему вылетает динамически слинкованый клиент: могут не совпадать адреса точек входа у моей .so и той что на сервере. Но почему может вылетать слинкованый статически? Получается что мой клиент зависит только от взаимодействия с сервером по сети, значит в mysql_real_connect приходят такие данные, которые приводят к segfault?

теперь приведу интересные данные о серверах где компилировался и где исполнялся код(линковался статически).
есть чудная утилита mysql_config
запускал с параметрами
mysql_config --libs --cflags

где я комплировал:
-L/usr/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm
-I/usr/include/mysql -g -pipe -march=i386 -mcpu=i686

где исполнялся код(точнее это с mysql сервера, а исполнялся код на компьютере, соедененным с ним локакльной сетью):
mysql_config --libs --cflags
-L/usr/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -L/usr/lib -lssl -lcrypto
-I/usr/include/mysql -g -pipe -m32 -march=i386 -mtune=pentium4 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing

как видно различия существенны, но, по моему мнению, эти различия играют роль только когда я линкуюсь с '.so' библиотекой а не с '.a'.
Повторю вопрос: почему может вылетать статически линованый клиент?

Неактивен

 

#2 09.05.2007 14:59:47

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: проблема с 'C API ' клиентом

В общем виде на вопрос ответить не могу. Причины могут быть разные, как связанные с mysql, так и связанные с библиотеками конкрентного дистрибутива.

Выполните:
strace ./client_app
(трассировка системных вызовов)
и
ltrace ./client_app
(трассировка библиотечных вызовов)

Это может указать на причину (часто - несуществующий файл, неправильный путь, неправильные права).

Неактивен

 

#3 09.05.2007 23:35:39

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: проблема с 'C API ' клиентом

А не пробовали запустить на том же хосте, на котором компилировалось? smile

Неактивен

 

#4 10.05.2007 00:30:34

Golova
Завсегдатай
Зарегистрирован: 23.03.2007
Сообщений: 92

Re: проблема с 'C API ' клиентом

конечно же на том же хосте(MYSQL 5.0) где компилировалось всё работает и даже на другом сервере где стоит MYSQL 4.1 тоже работает. А вот как дело касается кластера.... с ssl вылетает. (локально тоже пробовал на кластере всё ок было, правда без ssl)

Неактивен

 

#5 10.05.2007 00:37:01

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: проблема с 'C API ' клиентом

А если скомпилити прямо на "кластере" будет работать?

Как происходит подключение через tcp/ip или unix-socket? Если unix-scoket, попробуйте заменить хост к которому подключаетесь на реальный ip, тогда подключение будет по tcp/ip. Если tcp/ip, то попробуйте заменить на localhost.

Что говорит strace?

Неактивен

 

#6 10.05.2007 01:45:08

Golova
Завсегдатай
Зарегистрирован: 23.03.2007
Сообщений: 92

Re: проблема с 'C API ' клиентом

потаскал этот бинарный файл по другим серверам и попробовал запускать. Выяснил что там где стоит mysql он не вылетает и коннектиться, а откомпилирован статически! по идее он не должен вообще зависеть от mysql пакетов на конкретном сервере...
может такое быть что когда mysql пакеты ставятся то они обновляют/устанавливают какие либо системные библиотеки?
которые потом может захотеть использовать libmysqlclient библиотека ?

Отредактированно Golova (10.05.2007 01:55:17)

Неактивен

 

#7 10.05.2007 01:47:58

Golova
Завсегдатай
Зарегистрирован: 23.03.2007
Сообщений: 92

Re: проблема с 'C API ' клиентом

было бы куда бросить файл что выводит strace я бы кинул, для меня там понятного мало... может Вам на rgbeast на email бросить?

Неактивен

 

#8 10.05.2007 06:59:14

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: проблема с 'C API ' клиентом

можно скинуть на sakila (собака) sqlinfo (точка) ru

Неактивен

 

#9 10.05.2007 13:46:28

Golova
Завсегдатай
Зарегистрирован: 23.03.2007
Сообщений: 92

Re: проблема с 'C API ' клиентом

к сожалению уже не могу этого сделать, на всех серверах администратор поставил клиентские пакеды mysql и теперь приложение работает... sad

Неактивен

 

#10 10.05.2007 15:33:53

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: проблема с 'C API ' клиентом

Очень жаль sad

Пришлите само приложение - мы его отstracим сами smile

Неактивен

 

#11 10.05.2007 18:26:29

Golova
Завсегдатай
Зарегистрирован: 23.03.2007
Сообщений: 92

Re: проблема с 'C API ' клиентом

а вот это уже выходит за рамки моих полномочий.
приложение далеко не учебное...  smile
значит до лучших времен. Спасибо за содействие.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson