在我正在开发的项目项目中,我需要能够打开并从音频文件(至少是WAV文件)中读取内容。我使用mega-nerd.com的Win64安装程序安装了libsndfile,并创建了一个简单的C程序,用于打开和关闭音频文件以测试该库。链接到libsndfile时未定义的引用和错误的reloc地址
#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文件每instructions on the minGW wiki
-llibsndfile-1
我也复制和重命名与.a扩展名的文件.LIB并试图与-lsndfile-1
链接(这个工作别人有类似的问题),但我当我这样做的时候得到完全相同的错误。
任何帮助,将不胜感激!如果我无法成功链接到libsndfile,是否还有其他简单的库可供我从音频文件中读取?
编辑:当然,我花两天时间试图找到解决办法,最后发布到计算器,然后两个小时后解决问题。我将发布我的解决方案作为对问题的回答。
出于蓝:你确定你的MinGW的安装和库位宽度都符合,那就是两者都32位还是64位? – alk
尝试使用此命令:'gcc -Wall -o sndfile_test.exe sndfile_test.c -lsndfile' – user3078414
@alk - 我的MinGW安装绝对是64位的,并且该库使用下载的64位安装程序进行安装,所以我只能假设由它构建的库是64位以及... @ user3078414 - 链接与-lsndfile返回一个'无法找到-lsndfile'错误,但感谢您的建议 –