Kivyは以下のエラーでコンパイルに失敗します。 その理由は、 SDL2_mixer
リリース2.0.2で一部のフラグが削除/名前変更されたためです。具体的には、 MIX_INIT_MODPLUG
とMIX_INIT_FLUIDSYNTH
がSDL_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
これは、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;
誰もfluidsynthを使用していないと100%確信しています。 パッチを直接提供する場合は、マージします。
新しい定義はどこに入力しますか? 私と一緒に裸にしてください。 私はこれに不慣れです。
誰かがここで修正をクラックしたようです: https :
ArchLinux Kivyパッケージはどういうわけかこのコンパイルの問題を回避することができます:
python-kivy1.10.0パッケージはsdl2_mixer2.0.2に依存しており、記載されているパッチがなくても機能します。
以下を含むrequirements.txtファイルを使用してPython3仮想環境にKivyをインストールしようとしました。
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モジュールが正常にロードされます。
それは面白い。 残念ながら、Raspberry PiでArchを実行しているため、最新のマスターブランチをコンパイルする必要があります。また、リポジトリの1.10.0バージョンを使用すると、パフォーマンスが大幅に低下します。
実際、マスターブランチからmakepkg -s && makepkg --skipinteg
を介してpython-kivy Archパッケージをビルドすると、同じエラーで失敗し
パッチをPKGBUILDに適用すると、x86_64デスクトップでマスターKivyをビルドできます
ARMのビルドはデスクトップの場合と同じように機能するはずですが、それぞれのPKGBUILDファイルを更新する必要があります。
https://archlinuxarm.org/packages/arm/python-kivy
https://archlinuxarm.org/packages/arm/sdl_mixer
URLの「arm」をお持ちのRaspberryPiのARMバージョンに置き換えます。
ラズベリーパイ1- armv6
ラズベリーパイ2- armv7
ラズベリーパイ3- armv8
ただし、ArchLinux for ARMのsdl_mixerのパッケージは1.2.12-5であるため、これも更新する必要があります。
#5459で閉鎖
これはMacOSHighSierraにまだ存在します
@duaneking
pip install https://github.com/kivy/kivy/archive/master.zip(https://kivy.org/docs/installation/installation-osx.htmlを参照)のような開発バージョンをインストールすると、Highで動作しますシエラ。
私には選択肢がありません。 HSは十分に長い間存在していたので、キバ以外のオプションを探しています。コミュニティがこれを出荷/保守することを気にしないのであれば、私はそれに依存させてはいけません。
この修正でKivyバージョンをリリースできる変更はありますか? Ubuntu 18.04がリリースされたばかりなので、これはLinuxユーザーベースの実質的に95%に影響します。
Kivy Development Versionのインストールは、HighSierraで機能しました。 fantastechitに感謝します!
最も参考になるコメント
これはMacOSHighSierraにまだ存在します