Kivy: Kivy no se compila con SDL_mixer v2.0.2

Creado en 27 oct. 2017  ·  14Comentarios  ·  Fuente: kivy/kivy

Versiones

  • Python: 3.6.2
  • SO: ArchLinux
  • Kivy: última rama maestra a partir del 27.10.2017
  • Método de instalación de Kivy: compilando desde la fuente

Descripción

Kivy no se puede compilar con el error que se enumera a continuación. La razón es que algunas banderas fueron removidas / renombradas en SDL2_mixer versión 2.0.2, específicamente MIX_INIT_MODPLUG y MIX_INIT_FLUIDSYNTH fueron removidas de SDL_mixer.h .

Estoy dispuesto a intentar una solución, pero presumiblemente queremos mantener la compatibilidad con versiones anteriores, por lo que mi pensamiento es redefinir estas banderas localmente si no existen en el encabezado.

Código y registros

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

Comentario más útil

Esto todavía existe en MacOS High Sierra

Todos 14 comentarios

Esta es la nueva definición en SDL_mixer.h en v2.0.2:

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

Y el anterior para comparar:

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;

Estoy 100% seguro de que nadie usa fluidsynth. Si proporciona un parche directamente, lo fusionaremos.

¿Dónde ingresa en las nuevas definiciones? Por favor desnúdate conmigo. Soy nuevo en esto.

Parece que alguien intentó una solución aquí: https://github.com/kivy/kivy/pull/5459

El paquete ArchLinux Kivy de alguna manera se las arregla para solucionar este problema de compilación:

El paquete python-kivy 1.10.0 depende de sdl2_mixer 2.0.2 y funciona sin el parche mencionado.

Estaba intentando instalar Kivy en un entorno virtual Python 3 con un archivo requirements.txt que contiene:
Cython == 0.25.2
Kivy == 1.10.0
y falló con el mismo error error: ‘MIX_INIT_MODPLUG’ undeclared (first use in this function); did you mean ‘MIX_INIT_MOD’?

Después de instalar el paquete desde el repositorio: sudo pacman -S python-kivy y agregar la ruta a la instalación global de Python donde se instaló Kivy:
PYTHONPATH=/usr/lib/python3.6/site-packages/:/usr/local/lib/python3.6/site-packages/ python3 main.py , el módulo Kivy se carga correctamente.

Eso es interesante. Desafortunadamente, necesito compilar la última rama maestra porque estoy ejecutando Arch en una Raspberry Pi, y si uso la versión 1.10.0 del repositorio, el rendimiento es terrible.

De hecho, la creación de un paquete de Python-kivy Arch makepkg -s && makepkg --skipinteg , falla con el mismo error .

La aplicación del parche al PKGBUILD funciona para construir el maestro Kivy en el escritorio x86_64

La construcción para ARM debería funcionar igual que para el escritorio, solo necesita actualizar el archivo PKGBUILD respectivo:
https://archlinuxarm.org/packages/arm/python-kivy
https://archlinuxarm.org/packages/arm/sdl_mixer

Reemplaza 'arm' en la URL con la versión ARM de la Raspberry Pi que tienes:

Raspberry Pi 1 - armv6
Raspberry Pi 2 - armv7
Raspberry Pi 3 - armv8

Sin embargo, veo que el paquete para sdl_mixer en ArchLinux para ARM es 1.2.12-5, necesitaría actualizarlo también.

Cerrado por # 5459

Esto todavía existe en MacOS High Sierra

@duaneking
Si instala una versión de desarrollo como pip install https://github.com/kivy/kivy/archive/master.zip (consulte https://kivy.org/docs/installation/installation-osx.html), entonces funciona en High Sierra.

No es una opción para mí; Estoy buscando opciones que no sean de kiva ahora, ya que HS ha existido lo suficiente como para que si a la comunidad no le importa enviar / mantener esto, entonces no debería permitirme depender de ello.

¿Hay algún cambio en el que podría lanzar una versión de Kivy con esta solución? Dado que Ubuntu 18.04 acaba de ser lanzado, esto afectará prácticamente al 95% de nuestra base de usuarios de Linux.

la instalación de la versión de desarrollo de Kivy funcionó en High Sierra. ¡Gracias fantastechit!

¿Fue útil esta página
0 / 5 - 0 calificaciones