SDL2显示PNG图片+播放MP3
在使用SDL时,发现就算编译安装了SDL2_image和SDL_mixer也无法显示png格式图片和播放MP3音频文件。在网上搜索许久,这里总结一下编译过程。。。
SDL2_image
首先,我是用一下函数获取错误的信息的
1 |
|
错误信息如下:
Failed loading png_set_longjmp_fn: /lib/x86_64-linux-gnu/libpng12.so.0: undefined symbol: _png_set_longjmp_fn
可看到,libpng12.so 这个库文件位定义函数符号 png_set_longjmp_fn
接着我查找 libpng12.so 这个库文件
1 |
|
可看到系统存在两个版本的 libpng 库 。如果只存在一个,那么可以自行下载libpng最新版本编译安装,并继续以下操作。
其中 libpng12.so.0.49.0 是一个比较老的版本了。所以与最新的SDL2可能不兼容,才会出现上面的那个错误。知道的问题后,解决起来似乎也变得简单了。。。
-
显示12版本 dynamic symbols
$ nm -D /lib/x86_64-linux-gnu/libpng12.so.0|grep png_set_longjmp_fn
-
显示16版本 dynamic symbols
$ nm -D /usr/lib/x86_64-linux-gnu/libpng.so|grep png_set_longjmp_fn
结果:000000000000a840 T png_set_longjmp_fn
所以,解决方法很简单,删除旧的库文件,替换成新的。不过最后我发现了一个奇怪的问题,那就是在从 /lib/x86_64-linux-gnu 路径去除libpng12.so.0这个旧版本的库时,virtualbox虚拟机启动显示 创建COM对象失败 。最后重新编译安装了libpng12.so.0并复制到 /lib/x86_64-linux-gnu 目录下才可以!
cp /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0 /lib/x86_64-linux-gnu/
ln -s /lib/x86_64-linux-gnu/libpng16.so.16.34.0 /lib/x86_64-linux-gnu/libpng16.so #添加软链接
之后重新编译 SDL2_image
./configure
make
make install
SDL_mixer
通过 ./configure --help 查看配置选项。要想支持播放MP3格式,只需添加以下配置参数
./configure –enable-music-mp3 –enable-music-mp3-mad-gpl
make
make insatll
ldd build/.libs/libSDL2_mixer.so
1 |
|
这样就OK了 😃
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!