正如您从标题中看到的那样,我使用MinGW和Eclipse制作一个Win32应用程序,它可以从自己的资源中播放声音。我是这个MinGW编译器和Eclipse的新手,我的C ++有点生疏。目前不能使用VC ++。
所以,据我所知,我在向应用程序添加一些库内容时遇到了麻烦。
我的代码如下
//MyClass.cpp
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib,"libwinmm.a")
#include "MyClass.h"
#include "../resources.h"
/*------------------------------------*/
void MyClass::Enable() {
_isEnabled = true;
PlaySound(MAKEINTRESOURCE(ActivatedSound), NULL, SND_RESOURCE | SND_ASYNC);
}
//resources.h
#define ActivatedSound 2001
//resources.rc
ActivatedSound WAVE "resources/sounds/activated.wav"
编译器选项:-c -fmessage-length = 0 -std = c ++ 11
链接器标志:-mwindows
我在调用PlaySound功能的行中收到错误。
错误:对PlaySoundA @ 12&#39;
的未定义引用有谁能告诉我我做错了什么,以及如何解决它?
更新
似乎我通过添加包含&#34; winmm&#34;的记录来解决我的问题。到项目设置下的库字段 - &gt; MinGW C ++ Linker - &gt;图书馆 http://i.stack.imgur.com/q2N8f.png
...当然删除#pragma语句也有帮助。
答案 0 :(得分:1)
GCC不了解VS链接器编译指示。这意味着添加
-lwinmm
到链接器标记自己,就像使用任何其他编译器一样。
答案 1 :(得分:0)
问题是我没有在正确的字段中指定我试图使用的库(-lwinmm)。 因此,我不得不将其添加到链接器标志中,而是将其添加到库列表中(duh ..)。
在Eclipse(Kepler)中,此列表位于Project Properties - &gt;下。 C / C ++ Build - &gt;设置 - &gt; MinGW C ++ Linker - &gt;库,然后单击添加按钮并输入 winmm ,而不使用 -l </ em>
这是一个屏幕截图,显示它应该是什么样子,如果我不够具体: