Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > Undefined reference GCC |
Автор: CoDecode 18.9.2008, 21:26 | ||||||
Я вообще любитель звук программировать, но весьма не опытный и только недавно совсем начал разбираться как с самим Линухом, так и с его "звуконисущими" возможностями. До этого небольшой опыт был в виндушке да и то - на Бейсике. Посмотрел по имеющейся литературе, пошатался по Инету - ничего путного не нашел, в по данному случаю. Недавно STK пробовал мучить - такая же проблема, сейчас пытался демку запустить от ALSA. Там короче подключается заголовок, в котором тоже подключаются уйма <*.h>. Ну я все вроди правильно сделал, а когда пришло время компилить *.o - файл - вывело кучу ошибок, мол undefined reference to... Это *.cpp..
А это *.h(asoundlib.h), кинутый в туже директорию что и *.cpp...
А это ашыпки...
Библиотека ALSA libasound2 естественно есть и прекрасно служит.. dev-файлы для ALSA, как видно тоже есть.. Компилил в Geany(IDE) командой gcc -c "%f" Это наверно что-то компилятор непонимает, да? Ему нужно как-то по другому объяснить, что ли? Не судите строго - я начинающий. Просто какой бы код меня не выводил на работу со сторонними апи - постоянно эти undefined'ы, когда все вроди сделал правильно. Скажите пожалуйста - в чем может быть дело? Может я совсем не шарю в gcc(а оно так и есть)? ПАСИБА!!! ![]() |
Автор: Fin 18.9.2008, 21:37 |
Попробуй добавить при компиляции такой параметр компиляции -lasound2 |
Автор: CoDecode 18.9.2008, 21:48 | ||
Это при сборке
ну и аналогично если иправить "-lasound2" на "-libasound2"(вы, возможно описались) и при компиляции тоже что и раньше.. |
Автор: Fin 18.9.2008, 22:05 |
Когда подключается библиотека, lib убирается из названия. |
Автор: CoDecode 18.9.2008, 22:14 |
Да? Простите, яж фонарь... А за какую компоновку он говорит? |
Автор: Fin 18.9.2008, 22:20 | ||
Вот строчка компиляции,
твой код у меня скомпилировался и запустился. Есть динамическая библиотека libasound.so, у меня она находится в каталоге /usr/lib. В ней находится уже скомпилированный код. Когда ты подключаеш хедеры к программе, ты просто говориш компилятору, что такая функция сушествует. На стадии линковки программы, компилятор должен связать эти функции с реально сушествуюшими функциями. Для этого нужно подключать библиотеку, чтобы линковшик знал, где они физически находятся. Если в конце построения программы, выяснится, что что-то линковшик не смог связать, он и выдает сообшение undefined reference to |
Автор: CoDecode 18.9.2008, 23:29 |
Пасиба, дружищь!!! У меня тоже все ОКей! Только это.. А что означают эти параметры? Ну я имею в веду -o? По умолчанию IDE просила выполнить gcc -c "%f".. Не, это я потом так сделал, а сначала вообще было gcc -Wall -c "%f"(так, вроди).. Дело в том, что много кода выполнялось просто с помощью gcc -Wall -c "%f", но это тот код, который не работает с апи неродных библиотек. Тогда получается, что если хочешь по другому - нужно прописывать gcc name.c -lname(libname) -o name, да? Это первое звуковое приложение, которое я скомпилил на Линухе!!! Я за тя, Fin выпью, дружищь! ![]() |
Автор: nickless 21.9.2008, 20:27 |
Они все описаны в документации (man gcc), например -o от слова output, -c - compile, -l - library... |