Задавайте вопросы, мы ответим
Вы не зашли.
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'.
Повторю вопрос: почему может вылетать статически линованый клиент?
Неактивен
В общем виде на вопрос ответить не могу. Причины могут быть разные, как связанные с mysql, так и связанные с библиотеками конкрентного дистрибутива.
Выполните:
strace ./client_app
(трассировка системных вызовов)
и
ltrace ./client_app
(трассировка библиотечных вызовов)
Это может указать на причину (часто - несуществующий файл, неправильный путь, неправильные права).
Неактивен
А не пробовали запустить на том же хосте, на котором компилировалось?
Неактивен
конечно же на том же хосте(MYSQL 5.0) где компилировалось всё работает и даже на другом сервере где стоит MYSQL 4.1 тоже работает. А вот как дело касается кластера.... с ssl вылетает. (локально тоже пробовал на кластере всё ок было, правда без ssl)
Неактивен
А если скомпилити прямо на "кластере" будет работать?
Как происходит подключение через tcp/ip или unix-socket? Если unix-scoket, попробуйте заменить хост к которому подключаетесь на реальный ip, тогда подключение будет по tcp/ip. Если tcp/ip, то попробуйте заменить на localhost.
Что говорит strace?
Неактивен
потаскал этот бинарный файл по другим серверам и попробовал запускать. Выяснил что там где стоит mysql он не вылетает и коннектиться, а откомпилирован статически! по идее он не должен вообще зависеть от mysql пакетов на конкретном сервере...
может такое быть что когда mysql пакеты ставятся то они обновляют/устанавливают какие либо системные библиотеки?
которые потом может захотеть использовать libmysqlclient библиотека ?
Отредактированно Golova (10.05.2007 01:55:17)
Неактивен
было бы куда бросить файл что выводит strace я бы кинул, для меня там понятного мало... может Вам на rgbeast на email бросить?
Неактивен
можно скинуть на sakila (собака) sqlinfo (точка) ru
Неактивен
к сожалению уже не могу этого сделать, на всех серверах администратор поставил клиентские пакеды mysql и теперь приложение работает...
Неактивен
Очень жаль
Пришлите само приложение - мы его отstracим сами
Неактивен
а вот это уже выходит за рамки моих полномочий.
приложение далеко не учебное...
значит до лучших времен. Спасибо за содействие.
Неактивен