对“KSDATAFORMAT_SUBTYPE_PCM”的未定义引用
undefined reference to `KSDATAFORMAT_SUBTYPE_PCM'
我正在将一些代码从 Visual Studio 移植到 Mingw。尝试构建代码时出现以下链接器错误
undefined reference to `KSDATAFORMAT_SUBTYPE_PCM'
这是导致问题的代码段
WAVEFORMATEXTENSIBLE *pex = reinterpret_cast<WAVEFORMATEXTENSIBLE*>(new char[sizeof(WAVEFORMATEXTENSIBLE)]);
ZeroMemory( pex, sizeof(*pex));
pex->Format.nChannels = channels;
pex->Format.nSamplesPerSec = samplesPerSec;
pex->Format.nAvgBytesPerSec = samplesPerSec * blockAlign;
pex->Format.wBitsPerSample = bitsPerSample;
pex->Format.nBlockAlign =blockAlign;
pex->Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
pex->Format.cbSize = sizeof(*pex)-sizeof(pex->Format);
pex->Samples.wValidBitsPerSample = bitsPerSample;
pex->SubFormat = KSDATAFORMAT_SUBTYPE_PCM; // <--- ERROR
看来我需要输入库文件的名称才能消除此链接器错误。关于如何解决这个问题的任何建议?我已经将 dsound 、 winmm 、 ks 、 ksuser 、 ksguid 和 ole32 添加到链接器选项,但我仍然收到该错误。
看起来KSDATAFORMAT_SUBTYPE_PCM是一个函数指针。
如果您非常确定已经包含了所有需要的库,我建议您重新排列库的链接顺序。因为 g++(不确定 mingw 是否也这样做)会查看您链接的文件并获得它想要的内容,而忽略其余部分。有时,如果顺序错误,后面的库依赖于前面的库,这可能会导致你看到的。
您应该 link libksuser.a(例如:-lksuser
)以获得 KSDATAFORMAT_SUBTYPE_PCM。
关于符号属于哪个库的文档很少,所以我写了一个小脚本来帮助搜索你应该 link
#!/bin/sh
for lib in `ls /mingw64/x86_64-w64-mingw32/lib/*.a`
do
echo "search in $lib"
nm $lib | grep KSDATAFORMAT_SUBTYPE_PCM
done
随意更改库位置和要搜索的符号
我正在将一些代码从 Visual Studio 移植到 Mingw。尝试构建代码时出现以下链接器错误
undefined reference to `KSDATAFORMAT_SUBTYPE_PCM'
这是导致问题的代码段
WAVEFORMATEXTENSIBLE *pex = reinterpret_cast<WAVEFORMATEXTENSIBLE*>(new char[sizeof(WAVEFORMATEXTENSIBLE)]);
ZeroMemory( pex, sizeof(*pex));
pex->Format.nChannels = channels;
pex->Format.nSamplesPerSec = samplesPerSec;
pex->Format.nAvgBytesPerSec = samplesPerSec * blockAlign;
pex->Format.wBitsPerSample = bitsPerSample;
pex->Format.nBlockAlign =blockAlign;
pex->Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
pex->Format.cbSize = sizeof(*pex)-sizeof(pex->Format);
pex->Samples.wValidBitsPerSample = bitsPerSample;
pex->SubFormat = KSDATAFORMAT_SUBTYPE_PCM; // <--- ERROR
看来我需要输入库文件的名称才能消除此链接器错误。关于如何解决这个问题的任何建议?我已经将 dsound 、 winmm 、 ks 、 ksuser 、 ksguid 和 ole32 添加到链接器选项,但我仍然收到该错误。
看起来KSDATAFORMAT_SUBTYPE_PCM是一个函数指针。 如果您非常确定已经包含了所有需要的库,我建议您重新排列库的链接顺序。因为 g++(不确定 mingw 是否也这样做)会查看您链接的文件并获得它想要的内容,而忽略其余部分。有时,如果顺序错误,后面的库依赖于前面的库,这可能会导致你看到的。
您应该 link libksuser.a(例如:-lksuser
)以获得 KSDATAFORMAT_SUBTYPE_PCM。
关于符号属于哪个库的文档很少,所以我写了一个小脚本来帮助搜索你应该 link
#!/bin/sh
for lib in `ls /mingw64/x86_64-w64-mingw32/lib/*.a`
do
echo "search in $lib"
nm $lib | grep KSDATAFORMAT_SUBTYPE_PCM
done
随意更改库位置和要搜索的符号