Функции в gcc

Ответить
Аватара пользователя
Dimonweb

Функции в gcc

Сообщение Dimonweb »

Привет всем! В общем, у меня проблема в gcc под Asp Linux 7.3 и 9.0. Например, я делаю #include , потом вызываю функцию mysql_connect(...) , либо какую-нибуль иную. Компиляю файл, проходит нормально. А вот сборка не завершается успехом и выдается сообщение типа "Undefined reference to mysql_connect". Это же происходит и с glut'ом, SDL'ем и даже в хедерах с++(stream.h, iostream.h).

Если кто знает, что делать с этою проблемой, помогите!
Аватара пользователя
ruslandh

Re: Функции в gcc

Сообщение ruslandh »

Хорошо-бы последние строчки лога посотреть Изображение
Аватара пользователя
Figaro

Re: Функции в gcc

Сообщение Figaro »

Подключения одних хедеров недостаточно. Нужно еще подключать динамическую библиотеку, в которой находятся откомпилированные функции.  Если я правильно понял, то вот такая строчка



Код:

Код: Выделить всё

 gcc -c  test.c  

проходит и создает файл test.o. Зато



Код:

Код: Выделить всё

 gcc -o test  test.o  

выдает указанную ошибку.

Можно попробовать сделать так:



Код:

Код: Выделить всё

 gcc -o test -lmysqlclient test.o  

Здесь  опция -lmysqlclient[/i] указывает, что нужно подключить файл

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 можно читать вот
тут
.
Аватара пользователя
makaveli lcf

Re: Функции в gcc

Сообщение makaveli lcf »

кстати =  какие существуют способы (традиционные, если так можно выразиться) поиска библиотек, в которых находится нужная функция?

я напролом пользуюсь

grep function_name /usr/lib/lib*so*



а потом выбираю по смыслу))) просто некоторые функции встречаются в разных библиотеках (програмка использующая glut требует подключения штук трех - четырех иксовых библиотек, вот и ищешь, где что лежит)
Аватара пользователя
hasherfrog

Re: Функции в gcc

Сообщение hasherfrog »

makaveli lcf

Как вариант:

for a in [ /usr/lib/lib*.so ] ; do echo $a ; objdump -R -C $a | grep что-ищем ; done
Аватара пользователя
Figaro

Re: Функции в gcc

Сообщение Figaro »

Цитата:



какие существуют способы (традиционные, если так можно выразиться) поиска библиотек, в которых находится нужная функция?



Меня самого тоже очень это интересует Изображение



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

Re: Функции в gcc

Сообщение makaveli lcf »

Figaro

в принципе так, но когда я сделал лишь

-lglut



как потом выяснилось, потребовалось

-lXmu -lGl и так далее... но это видимо редкий случай...
Ответить

Вернуться в «Общий по Linux»