VS Code中PlaySound()函数无法运行,编译报错求助
问题描述
我尝试在Visual Studio Code中制作一个简单的音频播放器,但程序运行时出现错误:预启动任务'C/C++: g++.exe build active file'终止,退出码为-1。注释掉PlaySound所在行后程序可正常运行。
以下是我的代码:
#include <Windows.h> #include <mmsystem.h> #include <iostream> #pragma comment(lib, "winmm.lib") using namespace std; //string SONGNAME; int main(){ //SONGNAME = "Testing.wav"; cout << "Playing music \n"; PlaySound(TEXT("Testing.wav"), NULL , SND_FILENAME | SND_SYNC | SND_LOOP); return 0; }
我的资源管理器窗口如下:
我怀疑部分原因是选择了Visual Studio Code而非Visual Studio,但未在网上找到相关信息。编译命令及报错信息如下:
cmd /c chcp 65001>nul && C:\msys64\ucrt64\bin\g++.exe -fdiagnostics-color=always -g "C:\Users\Ivan S\OneDrive\Desktop\cplusplusprogramzzz\songplayer\songPlayer.cpp" -o "C:\Users\Ivan S\OneDrive\Desktop\cplusplusprogramzzz\songplayer\songPlayer.exe" C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\IVANS~1\AppData\Local\Temp\ccySdqvK.o: in function `main': C:/Users/Ivan S/OneDrive/Desktop/cplusplusprogramzzz/songplayer/songPlayer.cpp:14:(.text+0x3e): undefined reference to `__imp_PlaySoundA' collect2.exe: error: ld returned 1 exit status
解决方法
报错核心是链接器找不到PlaySound的定义,原因是MinGW不支持Visual Studio专属的#pragma comment(lib, "winmm.lib")指令,和你用VS Code还是Visual Studio无关。
两种解决方式:
手动修改编译命令:在g++编译命令末尾添加
-lwinmm参数,告诉链接器要链接winmm库。修改后的命令示例:g++ -g "C:\Users\Ivan S\OneDrive\Desktop\cplusplusprogramzzz\songplayer\songPlayer.cpp" -o "C:\Users\Ivan S\OneDrive\Desktop\cplusplusprogramzzz\songplayer\songPlayer.exe" -lwinmm配置VS Code的编译任务:打开
.vscode/tasks.json,找到编译任务的args数组,添加"-lwinmm"条目。修改后的tasks.json片段示例:"args": [ "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe", "-lwinmm" // 新增该行,链接winmm库 ],
额外提示:TEXT()宏会根据字符集切换调用PlaySoundA或PlaySoundW,如果遇到路径编码问题,可以直接显式调用PlaySoundA并传入ANSI格式的文件路径。
内容的提问来源于stack exchange,提问作者Ivan Sepulveda
相关产品推荐
相关产品推荐

