Kivy: KivyはSDL_mixerv2.0.2ではコンパイルされません

作成日 2017年10月27日  ·  14コメント  ·  ソース: kivy/kivy

バージョン

  • Python:3.6.2
  • OS: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

最も参考になるコメント

これはMacOSHighSierraにまだ存在します

全てのコメント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;

誰も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に感謝します!

このページは役に立ちましたか?
0 / 5 - 0 評価