libsndfile-sf_open():time.h中未定义的引用

libsndfile - sf_open(): Undefined references in time.h

本文关键字:未定义 引用 time open libsndfile-sf      更新时间:2023-10-16

我正在使用libsndfileportaudio播放.wav文件中的音频,在使用sf_open(const char*, int, SF_INFO*)时,我收到了一些奇怪的未定义引用(在time.h…?中)错误。在显示错误之前,这里有一些基本信息:我在Windows 10上使用MinGW 3.21(由于IDE限制而无法升级),CMake是我的构建系统。我已经验证了传递给sf_openconst char*是一个有效的文件名,并且我已经检查了没有其他代码行导致此编译错误。事不宜迟,有一些可爱的错误:

libsndfile/lib/libsndfile.a(aiff.o): In function time':
c:/dwimperl/c/bin/../lib/gcc/i686-w64-mingw32
/4.4.7/../../../../i686-w64-mingw32/include/time.h:242: 
undefined reference to _time32'

这被打印了好几次,可能是因为函数timesf_open中被大量使用,尽管我不知道为什么。这种情况也会发生:

In function `gmtime':
c:/dwimperl/c/bin/../lib/gcc/i686-w64-
mingw32/4.4.7/../../../../i686-w64-mingw32/include/time.h:240: 
undefined reference to `_gmtime32'

这些错误意味着sf_opentime.h之间没有相关性,但我甚至尝试了以下方法,

#include<sndfile.h>
int main {
    sf_open(nullptr, 0, nullptr);
    return 0;
}

并得到了相同的结果。我的libsndfile-1.dll与我编译的二进制文件位于同一目录中,并且正在链接到libsndfile.alibsndfile.dll.a。我尝试过只链接到libsndfile.a,结果相同。然而,我尝试只链接到libsndfile.dll.a和编译的程序,但后来崩溃了,说:

An error occured while using the portaudio stream
Error number: -9984
Error message: Incompatible host API specific stream info

我不确定这是否是另一个问题,但我想我应该提到它,因为sf_open,这个有缺陷的函数,似乎对流信息有影响。不管怎样,这是我所能做到的。感谢您的帮助!

看看我是个天才,问了问题却没有注意到。有时我想知道我怎么还活着。无论如何,这很简单。不要链接libsndfile.a,只链接libsndfile.dll.a。仅此而已。PortAudio错误完全无关。对不起你的愚蠢,希望这至少能帮助一个人。。。?