Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 包含winmm.lib不起作用_C++_Windows_Audio_Winmm - Fatal编程技术网

C++ 包含winmm.lib不起作用

C++ 包含winmm.lib不起作用,c++,windows,audio,winmm,C++,Windows,Audio,Winmm,我正试图用一个简单的数字猜测游戏来编写一个小程序 我想用一个简单的线程在它后面播放一个mp3文件。我读过,但没法用。它总是吐出错误: ||=== Build: Debug in pinkpantherguessinggame (compiler: GNU GCC Compiler) ===| C:\Users\Leon\Desktop\pCode\pinkpantherguessinggame\main.cpp|8|warning: ignoring #pragma comment [-Wun

我正试图用一个简单的数字猜测游戏来编写一个小程序

我想用一个简单的线程在它后面播放一个mp3文件。我读过,但没法用。它总是吐出错误:

||=== Build: Debug in pinkpantherguessinggame (compiler: GNU GCC Compiler) ===|
C:\Users\Leon\Desktop\pCode\pinkpantherguessinggame\main.cpp|8|warning: ignoring #pragma comment  [-Wunknown-pragmas]|
obj\Debug\main.o||In function `Z11pinkpantherv':|
C:\Users\Leon\Desktop\pCode\pinkpantherguessinggame\main.cpp|16|undefined reference to `_imp__mciSendStringA@16'|
||error: ld returned 1 exit status|
||=== Build failed: 2 error(s), 1 warning(s) (0 minute(s), 1 second(s)) ===|
这是我的密码:

#包括
#包括
#包括
#包括
#包括
#包括
#pragma注释(lib,“Winmm.lib”)
使用名称空间std;
无效开始(int);
无效品花药()
{
mciSendString(“打开”)‪E:\\Users\\cdev\\Musik\\pinkparter.mp\“键入mpegvideo别名mp3”,NULL,0,NULL);
mciSendString(“播放mp3”,NULL,0,NULL);
}
我试着从某处下载
winmm.lib
,因为它似乎找不到库(只是猜测)


我是做错了什么,还是需要包含其他标题?

如果仔细阅读编译器输出,您将看到以下警告:

警告:忽略#pragma注释[-Wunknown pragmas]

这意味着您的编译器(GCC)不支持您的代码使用
#pragma comment
,因此
winmm.lib
最终无法链接到最终可执行文件中,从而导致后续链接器错误:

对`\u imp的未定义引用__mciSendStringA@16"

这不是链接器无法找到
winmm.lib
,而是链接器没有被告知首先要使用
winmm.lib

#pragma
用于调用特定于编译器的命令。并非所有编译器都实现
#pragma comment
。VC++可以(其他一些也可以,比如BCC32/64),但GCC不能。您链接到的另一个问题被标记为
visual-c++
,因此
#pragma comment
在这种情况下是合适的


在您的情况下,您必须相应地调整构建过程,以使用另一种方式告诉链接器使用
winmm.lib
。在GCC中,您可以在调用链接器时使用,例如
-lwinmm

对于将来使用GCC或g++的访问者,我们可以通过指定-l标志手动链接库,以便ld.exe(链接器)可以找到它


g++test.cpp-o test.exe-lWinmm
我刚刚尝试将
gcc multimedia.c-o multimedia-l Winmm
与pragma一起使用,但没有成功 我得到


当您使用gcc但希望将windows库与pragma链接时,似乎出现了一些问题。。。我相信pragma只是visualstudio,但我不是100%确定,因为我没有使用其他任何东西。您可能希望了解如何将库与特定编译器链接,以及这些windows库在该环境中是否可用。请阅读错误消息。“main.cpp | 16 |对`_imp_mciSendStringA `的未定义引用”准确地告诉您问题出在哪里(不过您可能需要要求函数名以提高可读性)。您正在调用一个函数,而该函数不是由您正在链接的任何对象文件/库文件提供的(您甚至被告知是哪个函数)。很可能您只需要告诉链接器一个缺少的文件,该文件定义了缺少的符号。@jesper很可能是未定义的,因为他甚至没有链接。我看到一条关于忽略他试图用来链接的pragma的消息。“我试图从某处下载winmm.lib”-ehh。这似乎是个非常糟糕的主意。不要只是从互联网上的随机站点下载并运行随机二进制文件。相反找出真正的问题所在,然后如果你缺少一个库,找到官方(希望是值得信赖的)分发点,然后从那里下载(最好是源代码ypu在编译之前可以检查,而不仅仅是信任二进制文件)。@Christopher Pisz-我想你是对的。源代码有“
#pragma注释(lib,“Winmm.lib”)
”。谈论将自己绑在一个特定的平台上。这不是正确的跨平台链接库的方法。这非常有帮助!我在我的IDE中查找了如何链接库,然后它工作得很好,代码不能播放我的mp3,但这本身就是另一个问题!非常感谢。小提示:gcc(如果是MinGW的一部分,但我认为它也适用于其他构建工具链)将链接到libwinmm.a(也是工具链的一部分)。在某些情况下,格式甚至不匹配,就像我在(中间的某个地方)中显示的(用于叮当声)。
multimedia.c: In function 'int main()':
multimedia.c:5:5: error: 'mciSendString' was not declared in this scope
    5 |     mciSendString("open video.mpg alias file1");