【发布时间】:2019-01-31 04:24:36
【问题描述】:
我正在尝试编写一个带有简单猜数字游戏的小程序。
我想用一个简单的线程在它后面播放一个 mp3 文件。我已经阅读了How to play or open *.mp3 or *.wav sound file in c++ program?,但我无法让它工作。它总是吐出错误:
||=== 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)) ===|
这是我的代码:
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <windows.h>
#include <thread>
#include <Mmsystem.h>
#pragma comment(lib, "Winmm.lib")
using namespace std;
void start(int);
void pinkpanther()
{
mciSendString("open \"E:\\Users\\cdev\\Musik\\pinkpanther.mp\" type mpegvideo alias mp3", NULL, 0, NULL);
mciSendString("play mp3", NULL, 0, NULL);
}
我尝试从某个地方下载winmm.lib,因为它似乎找不到库(只是猜测)。
我做错了什么,还是需要包含其他标题?
【问题讨论】:
-
当您使用 gcc 但想将 windows 库与 pragma 链接时似乎有些不对劲......我相信 pragma 只是 Visual Studio,但我不是 100% 确定,因为我不使用任何东西别的。您可能想了解如何将库与您的特定编译器链接,以及这些 Windows 库在该环境中是否可用。
-
阅读错误信息。 “main.cpp|16|undefined reference to `_imp__mciSendStringA”确切地告诉您问题出在哪里(您可能希望对函数名称进行分解以提高可读性)。您正在调用一个函数,该函数不是由您链接的任何目标文件/库文件提供的(您甚至被告知 what 函数)。很可能您只需要告诉链接器有关定义丢失符号的丢失文件。
-
@jesper 最有可能是未定义的,因为他甚至没有链接。我看到一条关于忽略他试图用来链接的编译指示的消息。
-
“我尝试从某处下载 winmm.lib” - 嗯。这似乎是一个真的坏主意。 不要从互联网上的随机站点下载并运行随机二进制文件。反而;找出问题实际上是什么,然后如果你缺少一个库,找到官方(希望是值得信赖的)分发点,然后从那里下载(最好是源 ypu 可以在编译之前检查而不是仅仅信任二进制文件)。
-
@Christopher Pisz - 我认为你是对的。来源有“
#pragma comment(lib, "Winmm.lib")”。谈论将自己绑定到特定平台。这不是链接库的正确跨平台方式。