Показать полную графическую версию : Функции в gcc
Dimonweb
04-07-2004, 03:28
Привет всем! В общем, у меня проблема в gcc под Asp Linux 7.3 и 9.0. Например, я делаю #include <mysql/mysql.h>, потом вызываю функцию mysql_connect(...) , либо какую-нибуль иную. Компиляю файл, проходит нормально. А вот сборка не завершается успехом и выдается сообщение типа "Undefined reference to mysql_connect". Это же происходит и с glut'ом, SDL'ем и даже в хедерах с++(stream.h, iostream.h).
Если кто знает, что делать с этою проблемой, помогите!
ruslandh
04-07-2004, 06:03
Хорошо-бы последние строчки лога посотреть :)
Подключения одних хедеров недостаточно. Нужно еще подключать динамическую библиотеку, в которой находятся откомпилированные функции. Если я правильно понял, то вот такая строчка
gcc -c test.c
проходит и создает файл test.o. Зато
gcc -o test test.o
выдает указанную ошибку.
Можно попробовать сделать так:
gcc -o test -lmysqlclient test.o
Здесь опция -lmysqlclient указывает, что нужно подключить файл
libmysqlclient.so или libmysqlclient.a из стандартных путей (записаны в /etc/ld.so.conf).
Правда, тут есть другая проблема:
Хотя в заголовочных файлах mysql_connect присутствует, в библиотеке этой функции нет (используя nm, можно посмотреть ее содержимое). Кроме того, в самом заголовке (по крайней мере, в моей версии) написано так:
#ifdef USE_OLD_FUNCTIONS
MYSQL * STDCALL mysql_connect(MYSQL *mysql, const char *host,
const char *user, const char *passwd);
/* .... */
#endif
что наводит на размышления о том, что эти функции устарели (возможно, вместо них теперь нужно использовать mysql_manager_connect или mysql_real_connect)
Кстати, о динамических библиотеках и компиляции с помощью gcc можно читать вот тут (firststeps.ru/linux/general1.html).
makaveli lcf
06-07-2004, 09:53
кстати = какие существуют способы (традиционные, если так можно выразиться) поиска библиотек, в которых находится нужная функция?
я напролом пользуюсь
grep function_name /usr/lib/lib*so*
а потом выбираю по смыслу))) просто некоторые функции встречаются в разных библиотеках (програмка использующая glut требует подключения штук трех - четырех иксовых библиотек, вот и ищешь, где что лежит)
hasherfrog
06-07-2004, 11:18
makaveli lcf
Как вариант:
for a in [ /usr/lib/lib*.so ] ; do echo $a ; objdump -R -C $a | grep что-ищем ; done
какие существуют способы (традиционные, если так можно выразиться) поиска библиотек, в которых находится нужная функция?
Меня самого тоже очень это интересует :)
Я могу только предложить еще искать не во всех .so файлах, а только в тех, которые находятся в одном пакете с заголовочными (ну, или если заголовки в packagename-devel, то библиотеки будут в packagename).
makaveli lcf
08-07-2004, 10:07
Figaro
в принципе так, но когда я сделал лишь
-lglut
как потом выяснилось, потребовалось
-lXmu -lGl и так далее... но это видимо редкий случай...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.