LINUX.ORG.RU

проблемы при линковке библиотеки mysqlclient


0

0

начал разбираться в связке си + mysql
(до этого работал с php, поэтому не ругайтесь сильно, если что; так же я немного покапался в форуме, но ответа не нашел...)

пишу приложение для веб
элементарно - обработчик формы

makefile содержАЛ команду:
gcc -o actions.cgi actions.c
то есть не было никакой линковки

но когда добавил в файл си следующее (в разных, конечно местах, не подряд):

#include "/usr/local/mysql/include/mysql/mysql.h"

MYSQL mysql;
MYSQL_RES* result;
MYSQL_ROW row;

//MySQL initialization
if(!mysql_init(&mysql)) {
printf("Cannot initialize MySQL");
exit();
}

то пришлось к команде компиляции приписать кое-что еще:

gcc -o actions.cgi actions.c -L/usr/local/mysql/include/mysql/ -L/usr/local/mysql/lib/mysql -lmysqlclient

но это сказалось тем, что при работе на сервере *.cgi, исходником которого и является разбираемый си файл, у меня ошибка 500 (Internal Server Error)

должно быть я не первый, кто нарвался

anonymous

gcc -c -I path_to_mysql/include file.c gcc -o a.out file.o -L path_to_mysql/lib -l mysqlclient Должно работать, в противном случае проблемы не с компиляцией, а с исходным кодом программы.

anonymous
()
Ответ на: комментарий от anonymous

нет!
ошибка на сервере возникает именно при линковке библиотеки mysqlclient

я даже могу убрать всё, что касается mysql из кода,
получить работающую программу... и ничего не меняя в ней, прилинковать при компиляции mysqlclient...

ну и сервер тут же показывает 500 Internal Server Error :(

anonymous
()
Ответ на: комментарий от hooj

да, это cgi
но я не понял, что ты предлагаешь :(
я нашел в инете забугорном несколько аналогичных "жалоб"
и там было написано, что некоторое линкеры действительно себя так могут вести и ничего тут не поделаешь...
вот только, что это значит? и что делать?

anonymous
()
Ответ на: комментарий от anonymous

в добавление к предыдущему сообщению:

хотя линкование проходит нормально...

anonymous
()
Ответ на: комментарий от hooj

ldd name.cgi:

libmysqlclient.so.10 => not found
libc.so.6 => /lib/i686/libc.so.6 (0x4001d000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

полный листинг директории <some>/lib с указанием символических ссылок:

libdbug.a
libheap.a
libmerge.a
libmyisam.a
libmyisammrg.a
libmysqlclient.a
libmysqlclient.la
libmysqlclient.so -> libmysqlclient.so.10.0.0
libmysqlclient.so.10 -> libmysqlclient.so.10.0.0
libmysqlclient.so.10.0.0
libmystrings.a
libmysys.a
libnisam.a

вроде как все прально и должно работать...
разве нет?

anonymous
()
Ответ на: комментарий от anonymous

хм, хз. Хотя libmysqlclient.so.10 вроде есть, в голову приходит только проверить не мертвый ли это симлинк да права на него проверить, ну на крайняк посмотреть что в libmysqlclient.la и перелинковать попробовать

hooj ★★
()

#include "/usr/local/mysql/include/mysql/mysql.h"
Перепиши на
#include "mysql/mysql.h"
Добавь в /etc/ld.so.conf строку /usr/local/mysql/lib/mysql
сделай от рута ldconfig
Компили программу

gcc -o actions.cgi actions.c -I/usr/loca/mysql/include -lmysqlclient

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.