Kivy: Kivy 不能用 SDL_mixer v2.0.2 编译

创建于 2017-10-27  ·  14评论  ·  资料来源: kivy/kivy

版本

  • 蟒蛇:3.6.2
  • 操作系统:ArchLinux
  • Kivy:截至 2017.10.27 的最新主分支
  • Kivy 安装方法:从源码编译

描述

Kivy 编译失败,错误如下。 原因是在SDL2_mixer版本 2.0.2 中删除/重命名了一些标志,特别是MIX_INIT_MODPLUGMIX_INIT_FLUIDSYNTHSDL_mixer.h中删除。

我愿意尝试修复,但大概我们想要保持向后兼容性,所以我的想法是如果它们不存在于标头中,则在本地重新定义这些标志。

代码和日志

gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -march=armv8-a -O2 -pipe -fstack-protector-strong --param=ssp-buffer-size=4 -march=armv8-a -O2 -pipe -fstack-protector-strong --param=ssp-buffer-size=4 -march=armv8-a -O2 -pipe -fstack-protector-strong --param=ssp-buffer-size=4 -fPIC -Ikivy/include -I/usr/include/SDL2 -I/usr/local/include/SDL2 -I/usr/include/SDL2 -I/usr/include/SDL2 -I/usr/include/python3.6m -c kivy/core/audio/audio_sdl2.c -o build/temp.linux-aarch64-3.6/kivy/core/audio/audio_sdl2.o
kivy/core/audio/audio_sdl2.c: In function '__pyx_f_4kivy_4core_5audio_10audio_sdl2_mix_init':
kivy/core/audio/audio_sdl2.c:1647:63: error: 'MIX_INIT_MODPLUG' undeclared (first use in this function); did you mean 'MIX_INIT_MOD'?
   __pyx_v_want_flags = (__pyx_v_want_flags | ((MIX_INIT_MOD | MIX_INIT_MODPLUG) | MIX_INIT_FLUIDSYNTH));
                                                               ^~~~~~~~~~~~~~~~
                                                               MIX_INIT_MOD
kivy/core/audio/audio_sdl2.c:1647:63: note: each undeclared identifier is reported only once for each function it appears in
kivy/core/audio/audio_sdl2.c:1647:83: error: 'MIX_INIT_FLUIDSYNTH' undeclared (first use in this function); did you mean 'MIX_INIT_MID'?
   __pyx_v_want_flags = (__pyx_v_want_flags | ((MIX_INIT_MOD | MIX_INIT_MODPLUG) | MIX_INIT_FLUIDSYNTH));
                                                                                   ^~~~~~~~~~~~~~~~~~~
                                                                                   MIX_INIT_MID
kivy/core/audio/audio_sdl2.c: In function '__pyx_pf_4kivy_4core_5audio_10audio_sdl2_9MusicSDL2_extensions':
kivy/core/audio/audio_sdl2.c:4936:69: error: 'MIX_INIT_MODPLUG' undeclared (first use in this function); did you mean 'MIX_INIT_MOD'?
   __pyx_t_2 = ((__pyx_v_4kivy_4core_5audio_10audio_sdl2_mix_flags & MIX_INIT_MODPLUG) != 0);
                                                                     ^~~~~~~~~~~~~~~~
                                                                     MIX_INIT_MOD
 error: command 'gcc' failed with exit status 1

最有用的评论

这在 MacOS High Sierra 上仍然存在

所有14条评论

这是 v2.0.2 中SDL_mixer.h的新定义:

typedef enum
{
    MIX_INIT_FLAC   = 0x00000001,
    MIX_INIT_MOD    = 0x00000002,
    MIX_INIT_MP3    = 0x00000008,
    MIX_INIT_OGG    = 0x00000010,
    MIX_INIT_MID    = 0x00000020
} MIX_InitFlags;

和之前的比较:

typedef enum
{
    MIX_INIT_FLAC        = 0x00000001,
    MIX_INIT_MOD         = 0x00000002,
    MIX_INIT_MODPLUG     = 0x00000004,
    MIX_INIT_MP3         = 0x00000008,
    MIX_INIT_OGG         = 0x00000010,
    MIX_INIT_FLUIDSYNTH  = 0x00000020
} MIX_InitFlags;

我 100% 肯定没有人使用fluidsynth。 如果您直接提供补丁,我们将合并它。

你在哪里输入新定义? 请和我一起裸露。 我是新来的。

看起来有人在这里修复了: https :

ArchLinux Kivy 包以某种方式设法解决了这个编译问题:

python-kivy 1.10.0 包依赖于 sdl2_mixer 2.0.2,它可以在没有提到的补丁的情况下工作。

我试图在 Python 3 虚拟环境中安装 Kivy,其中的 requirements.txt 文件包含:
Cython==0.25.2
Kivy==1.10.0
并以相同的error: ‘MIX_INIT_MODPLUG’ undeclared (first use in this function); did you mean ‘MIX_INIT_MOD’?错误失败

从存储库安装软件包后: sudo pacman -S python-kivy并添加安装 Kivy 的全局 Python 安装路径:
PYTHONPATH=/usr/lib/python3.6/site-packages/:/usr/local/lib/python3.6/site-packages/ python3 main.py ,Kivy 模块加载成功。

那很有意思。 不幸的是,我需要编译最新的 master 分支,因为我在 Raspberry Pi 上运行 Arch,如果我使用存储库中的 1.10.0 版本,性能会很糟糕。

实际上,通过makepkg -s && makepkg --skipinteg从 master 分支构建 python-kivy Arch 包失败并出现相同的错误

补丁应用到PKGBUILD可以在 x86_64 桌面上构建 master Kivy

为 ARM 构建应该和桌面一样工作,只需要更新相应的 PKGBUILD 文件:
https://archlinuxarm.org/packages/arm/python-kivy
https://archlinuxarm.org/packages/arm/sdl_mixer

将 URL 中的“arm”替换为您拥有的 Raspberry Pi 的 ARM 版本:

树莓派 1 - armv6
树莓派 2 - armv7
树莓派 3 - armv8

但是,我看到 ArchLinux for ARM 中的 sdl_mixer 包是 1.2.12-5 ,也需要更新。

已关闭 #5459

这在 MacOS High Sierra 上仍然存在

@duaneking
如果您安装开发版本,如 pip install https://github.com/kivy/kivy/archive/master.zip (请参阅 https://kivy.org/docs/installation/installation-osx.html),那么它可以在高塞拉。

对我来说不是一个选择; 我现在正在寻找非 kiva 选项,因为 HS 已经存在了足够长的时间,如果社区不关心运送/维护它,那么我不应该让自己依赖它。

是否有任何更改可以通过此修复程序发布 Kivy 版本? 由于 Ubuntu 18.04 刚刚发布,这将影响到我们几乎 95% 的 Linux 用户群。

安装 Kivy 开发版适用于 High Sierra。 谢谢幻想!

此页面是否有帮助?
0 / 5 - 0 等级