2015-02-22 3 views
0

Прежде всего, я получил небольшой пример paex_record.c для работы.Пример Portaudio «record_file.c» не найден «min»

Я использую MinGW на Windows8 и скомпилировал portaudio из исходного кода, вот и я использовал использованный libportaudio-2.dll.

Я создал проект в QtCreator (без графического интерфейса) со следующими .pro-файл:

TEMPLATE = app 
CONFIG += console 
CONFIG -= app_bundle 
CONFIG -= qt 

SOURCES += main.cpp 

LIBS += -LC:/Audio/patest/paex_record_file -llibportaudio-2 

Моя папка C:/Audio/patest/paex_record_file выглядит следующим образом:

libportaudio-2.dll 
main.cpp 
pa_ringbuffer.c 
pa_ringbuffer.h 
pa_util.h 
paex_record_file.pro 
paex_record_file.pro.user 
portaudio.h 

Я скопировал как pa_ringbuffer и pa_util этому после того, как они не были найдены. Main.cpp содержит весь файл примера paex_record_file.c из источника portaudio.

Существует ошибка при вызове ringbuffer (строка 246 и 271: source): "min" was not declared in this scope

Я думал, что этот пример будет непосредственно работать так же, как record.c например.

Нужно ли включать дополнительные пакеты? Я пробовал algorithm, math, std и using namespace std, но все же ошибка возникает. Но я чувствую, что он должен работать вне коробки, возможно, мои включенные файлы или настройка/привязка папки не в порядке?

EDIT: Хорошо, поэтому я просто определил функцию min-function самостоятельно. Теперь он вызывает различную ошибку: undefined reference to "PaUtil_GetRingBufferReadAvailable" и еще пара таких. Существует, вероятно, lib отсутствует для связи, имея вид ...

+0

окна.h имеет макросы для min и max, которые, вероятно, мешают, попробуйте #define NOMINMAX, прежде чем включать его – 4pie0

+0

Это не сработало. 'define NOMINMAX' также определен в' windows.h', если определен 'RC_INVOKED', но я не знаю, определился ли последний или нет. Сделано редактирование на мой пост. – user2366975

ответ

0

У меня также была эта ошибка связывания, пытающаяся скомпилировать paex_record_file.c, оказывается, вам нужно скомпилировать pa_ringbuffer.c перед компиляцией основного файла. Существует также внешняя зависимость от некоторой функции alloc, поэтому вам нужно изменить 2 строки в файле.

Я не подкованных Qt, но вам нужно сделать что-то вроде ИСТОЧНИКОВ + = pa_ringbuffer.c main.cpp

Вот как я компилирую с MinGW

paex_record_file.c
Line 313: data.ringBufferData = (SAMPLE *) malloc (numBytes);
Строка 443: бесплатно (data.ringBufferData);

C: \ MinGW \ MSYS \ 1.0 \ дом \ Lazik \ Portaudio \ примеры> НКУ -o p_rec.exe C: \ MinGW \ MSYS \ 1.0 \ дом \ Lazik \ Portaudio \ SRC \ Common \ pa_ringbuffer.c paex_record_file.c -lportaudio -IC: \ MinGW \ msys \ 1.0 \ home \ Lazik \ portaudio \ src \ common

У меня не было проблемы с min, возможно, вы можете попытаться удалить защитник ifdef и попытаться перекомпилировать

#ifdef _WIN32 
#include <windows.h> 
#include <process.h> 
#endif 

в

#include <windows.h> 
#include <process.h> 

 Смежные вопросы

  • Нет связанных вопросов^_^