即使安装了 libmpg123,SDL_Mixer 2.0.4“MP3 支持不可用”

DS2*_*830 3 c++ mp3 sdl-mixer sdl-2

我是编程初学者,正在尝试制作一个简单的控制台 MP3 播放器作为一个项目。为此,我需要一种播放.mp3文件的方法。SDL Mixer 提供了此功能,但需要libmpg123安装在系统上。

即使我安装了所需的依赖项“libmpg123”,调用“Mix_Init()”总是失败。我没有对其他格式的依赖,例如 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;
}
Run Code Online (Sandbox Code Playgroud)

这是我的目录的内容/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

Run Code Online (Sandbox Code Playgroud)

我期望的输出:

Success!
Run Code Online (Sandbox Code Playgroud)

相反,我得到:

MP3 support not available
Mix_Init() returns 0
Run Code Online (Sandbox Code Playgroud)

更新:

显然,我还安装了其他依赖项......

但我不知道如何使用它们。

在此输入图像描述

kel*_*tar 5

当您构建 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
Run Code Online (Sandbox Code Playgroud)

然后 make && make install。或者使用 distro-provided libsdl2-mixer-dev,如果它符合您的要求。

  • 对,就是这样。SDL_mixer 需要这些头文件来编译其“插件”。安装您需要的所有开发包并构建 SDL_mixer。 (2认同)