Kivy: لا يقوم Kivy بالتجميع باستخدام SDL_mixer v2.0.2

تم إنشاؤها على ٢٧ أكتوبر ٢٠١٧  ·  14تعليقات  ·  مصدر: kivy/kivy

إصدارات

  • بايثون: 3.6.2
  • نظام التشغيل: ArchLinux
  • Kivy: أحدث فرع رئيسي اعتبارًا من 2017.10.27
  • طريقة التثبيت Kivy: تجميع من المصدر

وصف

فشل Kivy في التحويل مع الخطأ المذكور أدناه. والسبب هو أنه تمت إزالة / إعادة تسمية بعض العلامات في الإصدار 2.0.2 من SDL2_mixer ، وتحديدًا تمت إزالة 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

التعليق الأكثر فائدة

لا يزال هذا موجودًا على MacOS High Sierra

ال 14 كومينتر

هذا هو التعريف الجديد في SDL_mixer.h في الإصدار 2.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;

والسابق للمقارنة:

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٪ أن لا أحد يستخدم سوائل. إذا قدمت تصحيحًا مباشرةً ، فسنقوم بدمجه.

أين تدخل في التعريفات الجديدة؟ من فضلك تحلى بالصبر معي. أنا جديد على هذا.

يبدو أن شخصًا ما تعرض لكسر في الإصلاح هنا: https://github.com/kivy/kivy/pull/5459

تمكنت حزمة ArchLinux Kivy بطريقة ما من التغلب على مشكلة التجميع هذه:

تعتمد حزمة python-kivy 1.10.0 على sdl2_mixer 2.0.2 وتعمل بدون التصحيح المذكور.

كنت أحاول تثبيت Kivy في بيئة افتراضية Python 3 مع ملف requirements.txt الذي يحتوي على:
سايثون == 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 وإضافة المسار إلى تثبيت Python العام حيث تم تثبيت Kivy على:
PYTHONPATH=/usr/lib/python3.6/site-packages/:/usr/local/lib/python3.6/site-packages/ python3 main.py ، تم تحميل وحدة Kivy بنجاح.

ذلك مثير للاهتمام. لسوء الحظ ، أحتاج إلى تجميع أحدث فرع رئيسي لأنني أقوم بتشغيل Arch على Raspberry Pi ، وإذا كنت أستخدم الإصدار 1.10.0 من أداء المستودع فهو أمر مروع.

في الواقع ، فشل إنشاء حزمة Python-kivy Arch من الفرع الرئيسي ، عبر makepkg -s && makepkg --skipinteg ، مع الخطأ نفسه .

تطبيق التصحيح على PKGBUILD يعمل لبناء سيد Kivy على سطح المكتب x86_64

يجب أن يعمل إنشاء ARM بنفس طريقة عمل سطح المكتب ، ما عليك سوى تحديث ملف PKGBUILD المعني:
https://archlinuxarm.org/packages/arm/python-kivy
https://archlinuxarm.org/packages/arm/sdl_mixer

استبدل `` arm '' في عنوان URL بإصدار ARM من Raspberry Pi لديك:

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

ومع ذلك ، أرى أن حزمة sdl_mixer في ArchLinux لـ ARM هي 1.2.12-5 ، وسوف تحتاج إلى تحديث ذلك أيضًا.

مغلق برقم 5459

لا يزال هذا موجودًا على MacOS High Sierra

تضمين التغريدة
إذا قمت بتثبيت إصدار تطوير مثل تثبيت Pip https://github.com/kivy/kivy/archive/master.zip (انظر https://kivy.org/docs/installation/installation-osx.html) فإنه يعمل على High سلسلة جبلية.

ليس خيارا بالنسبة لي. أنا أبحث الآن عن خيارات غير kiva نظرًا لأن HS كان موجودًا لفترة كافية بحيث إذا كان المجتمع لا يهتم بشحن / الحفاظ على هذا ، فلا ينبغي أن أسمح لنفسي بالاعتماد عليه.

هل هناك أي تغيير يمكنك إطلاقه على إصدار Kivy مع هذا الإصلاح؟ منذ إصدار Ubuntu 18.04 للتو ، سيؤثر هذا عمليًا على 95٪ من قاعدة مستخدمي Linux الخاصة بنا.

تثبيت نسخة تطوير Kivy عملت على High Sierra. شكرا فانتاستيكيت!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات