Kivy ne parvient pas à compiler avec l'erreur répertoriée ci-dessous. La raison en est que certains indicateurs ont été supprimés/renommés dans SDL2_mixer
version 2.0.2, en particulier MIX_INIT_MODPLUG
et MIX_INIT_FLUIDSYNTH
ont été supprimés de SDL_mixer.h
.
Je suis prêt à essayer un correctif, mais nous voulons probablement maintenir la compatibilité descendante, donc mon idée est de redéfinir ces drapeaux localement s'ils n'existent pas dans l'en-tête.
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
Voici la nouvelle définition de SDL_mixer.h
de la 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;
Et le précédent pour comparaison :
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;
Je suis sûr à 100% que personne n'utilise fluidsynth. Si vous fournissez un correctif directement, nous le fusionnerons.
Où entrez-vous dans les nouvelles définitions ? S'il te plaît, nus avec moi. Je suis nouveau dans ce domaine.
On dirait que quelqu'un a tenté une solution ici : https://github.com/kivy/kivy/pull/5459
Le paquet ArchLinux Kivy parvient en quelque sorte à contourner ce problème de compilation :
Le package python-kivy 1.10.0 dépend de sdl2_mixer 2.0.2 et fonctionne sans le correctif mentionné.
J'essayais d'installer Kivy dans un environnement virtuel Python 3 avec un fichier requirements.txt contenant :
Cython==0.25.2
Kivy==1.10.0
et a échoué avec la même erreur error: ‘MIX_INIT_MODPLUG’ undeclared (first use in this function); did you mean ‘MIX_INIT_MOD’?
Après avoir installé le package à partir du référentiel : sudo pacman -S python-kivy
et ajouté le chemin d'accès à l'installation globale de Python où Kivy a été installé :
PYTHONPATH=/usr/lib/python3.6/site-packages/:/usr/local/lib/python3.6/site-packages/ python3 main.py
, le module Kivy est chargé avec succès.
C'est intéressant. Malheureusement, je dois compiler la dernière branche principale car j'exécute Arch sur un Raspberry Pi, et si j'utilise la version 1.10.0 du référentiel, les performances sont épouvantables.
En effet, la construction d'un package Arch python-kivy à partir de la branche master , via makepkg -s && makepkg --skipinteg
, échoue avec la même erreur .
L'application du correctif au PKGBUILD fonctionne pour la construction du maître Kivy sur le bureau x86_64
La construction pour ARM devrait fonctionner de la même manière que pour le bureau, il suffit de mettre à jour le fichier PKGBUILD respectif :
https://archlinuxarm.org/packages/arm/python-kivy
https://archlinuxarm.org/packages/arm/sdl_mixer
Remplacez 'arm' dans l'URL par la version ARM du Raspberry Pi que vous avez :
Framboise Pi 1 - armv6
Framboise Pi 2 - armv7
Framboise Pi 3 - armv8
Cependant, je vois que le package pour sdl_mixer dans ArchLinux pour ARM est 1.2.12-5 , il faudrait également le mettre à jour.
Fermé par #5459
Cela existe toujours sur MacOS High Sierra
@duaneking
Si vous installez la version de développement comme pip install https://github.com/kivy/kivy/archive/master.zip (voir https://kivy.org/docs/installation/installation-osx.html) alors cela fonctionne sur High Sierra.
Pas une option pour moi; Je suis à la recherche d'options non-kiva maintenant, car HS existe depuis assez longtemps pour que si la communauté ne se soucie pas de l'expédier/maintenir cela, alors je ne devrais pas me laisser en dépendre.
Y a-t-il un changement que vous pourriez publier une version Kivy avec ce correctif ? Depuis qu'Ubuntu 18.04 vient de sortir, cela affectera pratiquement 95% de notre base d'utilisateurs Linux.
l'installation de Kivy Development Version a fonctionné sur High Sierra. Merci fantastechit !
Commentaire le plus utile
Cela existe toujours sur MacOS High Sierra