В том числе winmm.lib не работает - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь написать небольшую программу с простой игрой в угадайку чисел.

Я хочу воспроизвести файл mp3 за ним, используя простой поток. Я прочитал Как воспроизвести или открыть * .mp3 или * .wav звуковой файл в программе на С ++? , но я не могу заставить его работать. Всегда выдает ошибку:

||=== 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, потому что, похоже, библиотека не найдена (только предположение).

Я что-то не так делаю или мне нужно включить какой-нибудь другой заголовок?

1 Ответ

0 голосов
/ 24 августа 2018

Если вы внимательно прочитаете вывод компилятора, вы увидите это предупреждение:

предупреждение: игнорирование комментария к прагме [-Wunknown-pragmas]

Это означает, что ваш компилятор (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.

...