В проекте проекта, над которым я работаю, мне нужно иметь возможность открывать и читать содержимое из аудиофайлов (по крайней мере, WAV-файлов). Я установил libsndfile с помощью установщика Win64 с mega-nerd.com и создал простую программу на C, которая открывает и закрывает аудиофайл для тестирования библиотеки.Неопределенный справочный и плохой адрес репозиции при связывании с libsndfile
#include <stdio.h>
#include <sndfile.h>
int main()
{
SNDFILE *sndfPtr;
SF_INFO soundfileInfo;
char path[] = "C:\\Users\\jayb\\Documents\\MusicClips\\violin.wav";
printf("Path: %s\n", path);
/* Open soundfile for reading */
soundfileInfo.format = 0; /* Must be set to zero before opening */
sndfPtr = sf_open(path, SFM_READ, &soundfileInfo);
if(sndfPtr == NULL)
{
fprintf(stderr, "Error: %s\n", sf_strerror(NULL));
return -1;
}
/* Close soundfile and check for error */
if(sf_close(sndfPtr))
{
fprintf(stderr, "There was an error closing the soundfile\n");
return -1;
}
return 0;
}
Однако я получаю неопределенные эталонные ошибки к функциям libsndfile, плюс плохая ошибка RELOC адрес, когда я пытаюсь компиляции/ссылки:
C:\Users\jbiernat\AppData\Local\Temp\ccSmO0dw.o:sndfile_test.c:(.text+0xbb): undefined reference to `sf_open'
C:\Users\jbiernat\AppData\Local\Temp\ccSmO0dw.o:sndfile_test.c:(.text+0xd8): undefined reference to `sf_strerror'
C:\Users\jbiernat\AppData\Local\Temp\ccSmO0dw.o:sndfile_test.c:(.text+0x10a): undefined reference to `sf_close'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: C:\Users\jbiernat\AppData\Local\Temp\ccSmO0dw.o: bad reloc address 0x20 in section `.eh_frame'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
Я компиляции с помощью этой команды:
gcc -Wall -o sndfile_test.exe sndfile_test.c -llibsndfile-1
Установочный из libsndfile поставляется с файлами заголовков sndfile.h
и sndfile.hh
и .lib, .def и .dll файлов: libsndfile-1.lib libsndfile-1.def libsndfile-1.dll
Каталоги заголовков и библиотек включены в путь поиска компилятора, и, похоже, проблема не связана с поиском библиотеки? Я связывающая файл .lib с -llibsndfile-1
согласно instructions on the minGW wiki
Я также скопировал и переименован в .lib файл с расширением .a и попытался связывания с -lsndfile-1
(это работает для кого-то другого, имеющего подобную проблему), но я когда я это делаю, получаю то же самое.
Любая помощь будет оценена! Если я не могу успешно подключиться к libsndfile, есть ли другие простые библиотеки, которые я мог бы использовать для чтения из аудиофайлов?
Edit: Конечно я провожу два дня, пытаясь найти решение, наконец, опубликовать в StackOverflow, а затем решить эту проблему через два часа. Я отправлю свое решение в качестве ответа на вопрос.
Из голубой: Вы уверены, что разрядность для установки MinGW и библиотеки в линии, то есть оба либо 32 или 64 бит? – alk
Попробуйте с помощью этой команды: 'gcc -Wall -o sndfile_test.exe sndfile_test.c -lsndfile' – user3078414
@alk - Моя установка MinGW определенно 64-битная, а библиотека была установлена с использованием загруженного 64-битного установщика, поэтому я могу только предположить, что библиотеки, построенные им, также являются 64-битными ... @ user3078414 - ссылка на -lsndfile возвращает ошибку 'can not find -sndfile', но спасибо за предложение –