我将一些代码从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添加到链接器选项中,但我仍然遇到了这个错误。
答案 0 :(得分:2)
看起来KSDATAFORMAT_SUBTYPE_PCM是一个函数指针。 如果您非常确定已包含所需的所有库,我建议您重新排列库的链接顺序。因为g ++(不确定mingw是否也会这样)会查看链接文件并获得它想要的内容,并忽略其余内容。有时,如果订单错误,后面的库取决于以前的库,这可能会导致你看到的。
答案 1 :(得分:1)
您应该链接libksuser.a(例如:#!/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
)以获取KSDATAFORMAT_SUBTYPE_PCM。
关于符号属于哪个库的文档很少,所以我写了一个小脚本来帮助搜索你应该链接的库
function cleanup() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Form responses 1');
var values = sheet.getDataRange().getValues();
var today = Utilities.formatDate(new Date(), ss.getSpreadsheetTimeZone(), 'MM/dd/yyyy')
for (var i = values.length - 1; i >= 0; i--) {
if ( values[i][4] != '' && dateDiffInDays(values[i][4],today) > 365 ) {
sheet.deleteRow(i+1);
}
}
};
function dateDiffInDays(d1,d2) {
var date1 = new Date(d1);
var date2 = new Date(d2);
var timeDiff = date1.getTime() - date2.getTime();
return Math.ceil(timeDiff / (1000 * 3600 * 24));
};
随时更改库位置和您要搜索的符号