SDL_mixer 2.0.4 «Поддержка MP3 недоступна», даже если установлена libmpg123

#c #mp3 #sdl-2 #sdl-mixer

#c #mp3 #sdl-2 #sdl-микшер

Вопрос:

Я новичок в программировании и пытаюсь создать простой консольный MP3-плеер в качестве проекта. Для этого мне нужен способ воспроизведения .mp3 файлов. SDL Mixer предоставляет эту возможность, но требует libmpg123 установки в чьей-либо системе.

Вызов ‘Mix_Init()’ всегда завершается неудачей, даже если у меня установлена требуемая зависимость ‘libmpg123’. У меня нет зависимостей для других форматов, таких как FLAC, OGG, MOD и MIDI, если это имеет значение.

Я использую Ubuntu 18.04 на своем ноутбуке, и у меня SDL2 версии 2.0.9, SDL_mixer 2.0.4, оба созданы из исходных текстов (хотя я пробовал версии, доступные через apt менеджер пакетов). У меня также есть libmpg123 установленная, которую я также собрал из исходного кода (опять же, я также попробовал версию, доступную через менеджер пакетов).

Я скомпилировал код двумя способами:

g Mix_Init.cpp -lSDL2 -lSDL2_mixer

и

g Mix_Init.cpp -lSDL2 -lSDL2_mixer -lmpg123

Я не знаю, какой из них правильный, но ни один из них не устраняет проблему.

 #include<SDL2/SDL.h>
#include<SDL2/SDL_mixer.h>
#include<iostream>

int main(int argc, char** argv)
{
    if(SDL_Init(SDL_INIT_AUDIO))
        std::cerr << "SDL_Init() Error: " << SDL_GetError() << std::endl;

    else {
        int result {0};
        if(!((result = Mix_Init(MIX_INIT_MP3)) amp;amp; MIX_INIT_MP3)){
            std::cerr << Mix_GetError() << std::endl;
            std::cerr << "Mix_Init() returns " << result << std::endl;
        }
        else {
            std::cout << "Success!" << std::endl;
        }
    }
    return 0;
}
  

Вот содержимое моего /usr/local/lib каталога:

 cmake           libmpg123.so.0.44.8  libSDL2-2.0.so.0      libSDL2main.la              libSDL2_mixer.so  pkgconfig
libglfw3.a      libout123.la         libSDL2-2.0.so.0.9.0  libSDL2_mixer-2.0.so.0      libSDL2.so        python2.7
libmpg123.la    libout123.so         libSDL2.a             libSDL2_mixer-2.0.so.0.2.2  libSDL2_test.a    python3.6
libmpg123.so    libout123.so.0       libSDL2.la            libSDL2_mixer.a             libSDL2_test.la   python3.7
libmpg123.so.0  libout123.so.0.2.2   libSDL2main.a         libSDL2_mixer.la            mpg123

  

Я ожидаю, что результат:

 Success!
  

Вместо этого я получаю:

 MP3 support not available
Mix_Init() returns 0
  

Обновить:

По-видимому, у меня установлены и другие зависимости…

Но я понятия не имею, как их использовать.

введите описание изображения здесь

Ответ №1:

При сборке SDL2_mixer у вас должны быть установлены файлы разработки для mpg123. Например, для debian / ubuntu вам понадобится libmpg123-dev (и аналогично для других форматов), и SDL_mixer ./configure должен выводить что-то вроде

 checking mpg123.h usability... yes
checking mpg123.h presence... yes
checking for mpg123.h... yes
checking for mpg123_replace_reader_handle in -lmpg123... yes
-- dynamic libmpg123 -> libmpg123.so.0
  

Затем выполните amp;amp; make install. Или используйте предоставленный дистрибутив libsdl2-mixer-dev , если он соответствует вашим требованиям.

Комментарии:

1. То есть вы имеете в виду сначала установить libmpg123-dev , а ЗАТЕМ собрать SDL2 mixer, а не наоборот? И то же самое для других форматов?

2. Да, точно. SDL_mixer нужны эти заголовочные файлы для компиляции своих «плагинов». Установите все необходимые пакеты разработки и создайте SDL_mixer.