PDA

Показать полную графическую версию : Функции в 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
Хорошо-бы последние строчки лога посотреть :)

Figaro
04-07-2004, 12:12
Подключения одних хедеров недостаточно. Нужно еще подключать динамическую библиотеку, в которой находятся откомпилированные функции.  Если я правильно понял, то вот такая строчка
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

Figaro
06-07-2004, 11:37
какие существуют способы (традиционные, если так можно выразиться) поиска библиотек, в которых находится нужная функция?
Меня самого тоже очень это интересует :)

Я могу только предложить еще искать не во всех .so файлах, а только в тех, которые находятся в одном пакете с заголовочными (ну, или если заголовки в packagename-devel, то библиотеки будут в packagename).

makaveli lcf
08-07-2004, 10:07
Figaro
в принципе так, но когда я сделал лишь
-lglut

как потом выяснилось, потребовалось
-lXmu -lGl и так далее... но это видимо редкий случай...




© OSzone.net 2001-2012