尝试使用 Windows Midi API 时出现 gcc 错误

gcc error when trying to use Windows Midi API

问题很简单,我正在尝试将 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:\Users\user\AppData\Local\Temp\ccV6si7i.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 所述,您需要 link winmm 库。 GCC 不理解 MSVC 的 #pragma,因此它不知道需要它。因此,linking 在找不到函数时会失败。

查看 How to specify libraries paths in gcc? 等问题以了解操作方法。