尝试使用Windows Midi API时发生gcc错误



问题很简单,我正在尝试将Windows API用于Midi,但gcc找不到函数的引用。我使用的是MinGW和gcc 9.2.0版本。我发现的类似问题的唯一解决方案是添加winmm.lib,但这也无济于事。

c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:UsersuserAppDataLocalTempccV6si7i.o: in function `main':
c:/.../test.cpp:13: undefined reference to `midiInGetNumDevs@0'
collect2.exe: error: ld returned 1 exit status

这是C++代码产生错误:

#include <iostream>
#include <string>
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")
int main()
{
MIDIINCAPS caps;
UINT numberOfDevices = midiInGetNumDevs();
if(numberOfDevices < 0){
for (unsigned int i = 0; i < numberOfDevices; ++i) {
midiInGetDevCaps(i, &caps, sizeof(MIDIINCAPS));
std::cout << i << " : name = " << caps.szPname << std::endl;
}
}
return 0;
}

@dxiv注意到,您需要链接winmm库。GCC不理解MSVC的#pragma,所以它不知道需要它。因此,当链接找不到函数时,链接将失败。

请参阅以下问题:如何在gcc中指定库路径?学习如何。

最新更新