SDL_Mixer 2.0.4 «Поддержка MP3 недоступна», даже если установлена ​​libmpg123 - PullRequest
0 голосов
/ 31 марта 2019

Я новичок в программировании и пытаюсь сделать простой консольный 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)) && 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

UPDATE:

Очевидно, у меня установлены и другие зависимости ...

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

enter image description here

1 Ответ

2 голосов
/ 01 апреля 2019

При сборке SDL2_mixer вам необходимо установить файлы разработки для mpg123.Например, для debian / ubuntu вам понадобится libmpg123-dev (и аналогично для других форматов), а SDL_mixer's ./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

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

...