Я пытаюсь написать небольшую программу с простой игрой в угадывание чисел.
Я хочу воспроизвести mp3-файл, используя простой поток. я прочитал Как воспроизвести или открыть звуковой файл * .mp3 или * .wav в программе c ++?, но я не могу заставить его работать. Всегда выдает ошибку:
||=== 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
откуда-то, потому что он, кажется, не находит библиотеку (только предположение).
Я делаю что-то не так или мне нужно включить какой-нибудь другой заголовок?
Если вы внимательно прочитаете вывод компилятора, вы увидите это предупреждение:
предупреждение: игнорирование комментария #pragma [-Wunknown-псевдокомментарии]
Это означает, что ваш компилятор (GCC) не поддерживает использование вашего кода #pragma comment
, так что winmm.lib
в конечном итоге не попадает в ваш конечный исполняемый файл, что приводит к следующей ошибке компоновщика:
неопределенная ссылка на `_imp__mciSendStringA @ 16 ‘
Дело не в том, что компоновщик не может найти winmm.lib
, дело в том, что компоновщику не сказано использовать winmm.lib
на первом месте.
#pragma
используется для вызова компилятор конкретных команды. Не все компиляторы реализуют #pragma comment
, VC ++ делает (и некоторые другие, как BCC32 / 64), но GCC нет. Другой вопрос, на который вы ссылались, был помечен visual-c++
, так #pragma comment
было уместно в этом случае.
В вашем случае вам придется соответствующим образом скорректировать процесс сборки, чтобы использовать другой способ указать компоновщику использовать winmm.lib
, Вы делаете это в GCC, используя -l
вариант при вызове компоновщика, например -lwinmm
,
Других решений пока нет …