Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Undefined reference GCC, Я еще сырой юзверь 
:(
    Опции темы
CoDecode
  Дата 18.9.2008, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 20.3.2008
Где: Украина, Херсонск ая обл.

Репутация: нет
Всего: нет



Я вообще любитель звук программировать, но весьма не опытный и только недавно совсем начал разбираться как с самим Линухом, так и с его "звуконисущими" возможностями. До этого небольшой опыт был в виндушке да и то - на Бейсике. 
Посмотрел по имеющейся литературе, пошатался по Инету - ничего путного не нашел, в по данному случаю. Недавно STK пробовал мучить - такая же проблема, сейчас пытался демку запустить от ALSA. Там короче подключается заголовок, в котором тоже подключаются уйма <*.h>. Ну я все вроди правильно сделал, а когда пришло время компилить *.o - файл - вывело кучу ошибок, мол undefined reference to...

Это *.cpp..
Код

 /*  *  This extra small demo sends a random samples to your speakers.
  */
 
 #include "asoundlib.h"
 static char *device = "default";                        /* playback device */
 
 snd_output_t *output = NULL;
 unsigned char buffer[16*1024];                          /* some random data */
 
 int main(void)
 {
         int err;
         unsigned int i;
         snd_pcm_t *handle;
        snd_pcm_sframes_t frames;
 
         for (i = 0; i < sizeof(buffer); i++)
                 buffer[i] = random() & 0xff;
 
         if ((err = snd_pcm_open(&handle, device, SND_PCM_STREAM_PLAYBACK, 0)) < 0) {
               printf("Playback open error: %s\n", snd_strerror(err));
                exit(EXIT_FAILURE);
         }
         if ((err = snd_pcm_set_params(handle,
                                       SND_PCM_FORMAT_U8,
                                       SND_PCM_ACCESS_RW_INTERLEAVED,
                                       1,
                                       48000,
                                       1,
                                       500000)) < 0) {   /* 0.5sec */
                 printf("Playback open error: %s\n", snd_strerror(err));
                 exit(EXIT_FAILURE);
         }
 
         for (i = 0; i < 16; i++) {
                 frames = snd_pcm_writei(handle, buffer, sizeof(buffer));
                 if (frames < 0)
                         frames = snd_pcm_recover(handle, frames, 0);
                 if (frames < 0) {
                         printf("snd_pcm_writei failed: %s\n", snd_strerror(err));
                         break;
                 }
                 if (frames > 0 && frames < (long)sizeof(buffer))
                         printf("Short write (expected %li, wrote %li)\n", (long)sizeof(buffer), frames);
         }
 
         snd_pcm_close(handle);
         return 0;
 }



А это *.h(asoundlib.h), кинутый в туже директорию что и *.cpp...
Код

#ifndef __ASOUNDLIB_H
#define __ASOUNDLIB_H

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <assert.h>
#include <endian.h>
#include <sys/poll.h>
#include <errno.h>
#include <stdarg.h>

#include <alsa/asoundef.h>
#include <alsa/version.h>
#include <alsa/global.h>
#include <alsa/input.h>
#include <alsa/output.h>
#include <alsa/error.h>
#include <alsa/conf.h>
#include <alsa/pcm.h>
#include <alsa/rawmidi.h>
#include <alsa/timer.h>
#include <alsa/hwdep.h>
#include <alsa/control.h>
#include <alsa/mixer.h>
#include <alsa/seq_event.h>
#include <alsa/seq.h>
#include <alsa/seqmid.h>
#include <alsa/seq_midi_event.h>
#include <alsa/conv.h>
#include <alsa/instr.h>

#endif /* __ASOUNDLIB_H */



А это ашыпки...
Код

/tmp/ccd3oXOx.o: In function `main':
pcm_min.c:(.text+0x5f): undefined reference to `snd_pcm_open'
pcm_min.c:(.text+0x73): undefined reference to `snd_strerror'
pcm_min.c:(.text+0xca): undefined reference to `snd_pcm_set_params'
pcm_min.c:(.text+0xde): undefined reference to `snd_strerror'
pcm_min.c:(.text+0x121): undefined reference to `snd_pcm_writei'
pcm_min.c:(.text+0x144): undefined reference to `snd_pcm_recover'
pcm_min.c:(.text+0x158): undefined reference to `snd_strerror'
pcm_min.c:(.text+0x1ad): undefined reference to `snd_pcm_close'
collect2: выполнение ld завершилось с кодом возврата 1
Compilation failed.


Библиотека ALSA libasound2 естественно есть и прекрасно служит.. dev-файлы для ALSA, как видно тоже есть.. Компилил в Geany(IDE) командой gcc -c "%f"
Это наверно что-то компилятор непонимает, да? Ему нужно как-то по другому объяснить, что ли? Не судите строго - я начинающий. Просто какой бы код меня не выводил на работу со сторонними апи - постоянно эти undefined'ы, когда все вроди сделал правильно.
Скажите пожалуйста - в чем может быть дело? Может я совсем не шарю в gcc(а оно так и есть)?
ПАСИБА!!! smile 
PM MAIL   Вверх
Fin
Дата 18.9.2008, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: нет
Всего: 10



Попробуй добавить при компиляции такой параметр компиляции -lasound2


--------------------
Пролетал мимо.
PM MAIL   Вверх
CoDecode
Дата 18.9.2008, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 20.3.2008
Где: Украина, Херсонск ая обл.

Репутация: нет
Всего: нет



Это при сборке

Код

gcc -c -lasound2 "pcm_min.c" (в папке: /media/F/ExAmPlEs&SoUrCeS/Si/ALSA)
gcc: -lasound2: входные файлы компоновки не использованы, поскольку компоновка не выполнялась


ну и аналогично если иправить "-lasound2" на "-libasound2"(вы, возможно описались) и при компиляции тоже что и раньше..
PM MAIL   Вверх
Fin
Дата 18.9.2008, 22:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: нет
Всего: 10



Когда подключается библиотека, lib убирается из названия.

Это сообщение отредактировал(а) Fin - 18.9.2008, 22:05


--------------------
Пролетал мимо.
PM MAIL   Вверх
CoDecode
Дата 18.9.2008, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 20.3.2008
Где: Украина, Херсонск ая обл.

Репутация: нет
Всего: нет



Да? Простите, яж фонарь...
А за какую компоновку он говорит?
PM MAIL   Вверх
Fin
Дата 18.9.2008, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: нет
Всего: 10



Вот строчка компиляции,
Код

 gcc main.c  -lasound -o main

 твой код у меня скомпилировался и запустился.

Есть динамическая библиотека libasound.so, у меня она находится в каталоге /usr/lib. В ней находится уже скомпилированный код. Когда ты подключаеш хедеры к программе, ты просто говориш компилятору, что такая функция сушествует. На стадии линковки программы, компилятор должен связать эти функции с реально сушествуюшими функциями. Для этого нужно подключать библиотеку, чтобы линковшик знал, где они физически находятся. Если в конце построения программы, выяснится, что что-то линковшик не смог связать, он и выдает сообшение undefined reference to 

Это сообщение отредактировал(а) Fin - 18.9.2008, 22:43


--------------------
Пролетал мимо.
PM MAIL   Вверх
CoDecode
Дата 18.9.2008, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 20.3.2008
Где: Украина, Херсонск ая обл.

Репутация: нет
Всего: нет



Пасиба, дружищь!!! У меня тоже все ОКей! Только это.. А что означают эти параметры? Ну я имею в веду -o? По умолчанию IDE просила выполнить gcc -c "%f".. Не, это я потом так сделал, а сначала вообще было gcc -Wall -c "%f"(так, вроди).. Дело в том, что много кода выполнялось просто с помощью gcc -Wall -c "%f", но это тот код, который не работает с апи неродных библиотек. Тогда получается, что если хочешь по другому - нужно прописывать gcc name.c  -lname(libname) -o name, да?
Это первое звуковое приложение, которое я скомпилил на Линухе!!! Я за тя, Fin выпью, дружищь! smile 

PM MAIL   Вверх
nickless
Дата 21.9.2008, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 4
Всего: 181



Цитата(CoDecode @  18.9.2008,  22:29 Найти цитируемый пост)
А что означают эти параметры?

Они все описаны в документации (man gcc), например -o от слова output, -c - compile, -l - library...


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1228 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.