اذهب إلى المحتوى

السؤال

نشر

"أهلاً يا شباب، أنا مبرمج عمري 14 سنة، أعمل على تطوير نسخة خاصة من محرك Minetest باسم HeroCraft 1.0.

واجهت مشكلة عند محاولة تحويل الكود إلى ملف تنفيذي (EXE) باستخدام Dev-C++ و GitHub Actions. يظهر لي خطأ دائم أن مكتبة الرسوميات مفقودة:
[Error] irrTypes.h: No such file or directory

مع العلم أنني أستخدم نظام ويندوز 10، وهذا هو رابط المستودع الخاص بي على GitHub لمراجعة ملفات الـ CMake والـ YAML:
[https://github.com/enggemhe122-jpg/HeroCraft-1.0-Windows-MinGW-]

أريد طريقة بسيطة أو تعديلاً على ملف البناء لكي أحصل على ملف EXE أرسله لأصدقائي. شكراً لكم!"

Recommended Posts

  • 1
نشر

محرك Minetest لا يستخدم مكتبة رسوميات عادية، بل نسخة معدلة IrrlichtMt، والمترجم لم يجد ملفات المكتبة لأنها لا تأتي مدمجة مع الكود الأساسي للعبة، ويجب تحميلها وربطها أثناء عملية البناء.

وللعلم بيئة Dev-C++ قديمة  وغير مستخدمة حاليًا، ولا تستطيع التعامل مع مشاريع C++ الحديثة والمعقدة التي تستخدم نظام CMake مثل Minetest، الأفضل الانتقال إلى Visual Studio Code (مع إضافات CMake Tools) أو Visual Studio 2022.

والمشكلة ليست فقط استخراج الـ EXE، بل إرفاق ملفات الـ DLL الخاصة بالنظام معه، لكي لا تظهر لأصدقائك أخطاء مثل VCRUNTIME140.dll is missing أو أخطاء غياب مكاتب الصوت والرسوميات.

لذا قم بتعديل ملف .github/workflows/main.yml بالتالي:

  • حيث قمت بإضافة خطوة تحميل IrrlichtMt لحل مشكلة [Error] irrTypes.h.
  • تعديل أمر البناء (CMake) بإضافة -DRUN_IN_PLACE=1 لكي تعمل اللعبة من المجلد مباشرة بدون تثبيت، وحذف || true من أمر ninja لأنها كانت تجعل GitHub يتجاهل الأخطاء ويعطيك ملف فارغ.
  • تجميع ملفات النظام DLLs والمجلدات الأساسية فالـ EXE وحده سيُظهر شاشة سوداء أو يغلق مباشرًة عند أصدقائك لأنه يحتاج مجلدات اللعبة الأساسية (builtin, client) وملفات الـ DLL.
name: HeroCraft-1-0-Power-Build
on: [push, workflow_dispatch]

jobs:
  build-windows:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Setup MSYS2
        uses: msys2/setup-msys2@v2
        with:
          msystem: UCRT64
          update: true
          install: >-
            git
            mingw-w64-ucrt-x86_64-gcc
            mingw-w64-ucrt-x86_64-cmake
            mingw-w64-ucrt-x86_64-ninja
            mingw-w64-ucrt-x86_64-luajit
            mingw-w64-ucrt-x86_64-zstd
            mingw-w64-ucrt-x86_64-libvorbis
            mingw-w64-ucrt-x86_64-libogg
            mingw-w64-ucrt-x86_64-sqlite3
            mingw-w64-ucrt-x86_64-curl
            mingw-w64-ucrt-x86_64-zlib
            mingw-w64-ucrt-x86_64-libpng
            mingw-w64-ucrt-x86_64-libjpeg-turbo
            mingw-w64-ucrt-x86_64-freetype
            mingw-w64-ucrt-x86_64-openal
            mingw-w64-ucrt-x86_64-jsoncpp
            mingw-w64-ucrt-x86_64-SDL2
            mingw-w64-ucrt-x86_64-gmp

      - name: Download IrrlichtMt (Fix irrTypes.h)
        shell: msys2 {0}
        run: |
          mkdir -p lib
          git clone --depth 1 https://github.com/minetest/irrlicht.git lib/irrlichtmt

      - name: Force Build HeroCraft
        shell: msys2 {0}
        run: |
          mkdir -p misc
          echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"></assembly>' > misc/luanti.exe.manifest
          
          mkdir build && cd build
          cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DENABLE_GETTEXT=0 -DBUILD_UNITTESTS=0 -DENABLE_WINRESOURCE=0 -DRUN_IN_PLACE=1
          
          ninja

      - name: Package Game & Missing DLLs
        shell: msys2 {0}
        run: |
          mkdir -p HeroCraft-Ready/bin
          
          cp build/bin/*.exe HeroCraft-Ready/bin/
          
          cp -r builtin HeroCraft-Ready/ || true
          cp -r client HeroCraft-Ready/ || true
          cp -r games HeroCraft-Ready/ || true
          cp -r textures HeroCraft-Ready/ || true
          cp -r fonts HeroCraft-Ready/ || true
          
          for exe in HeroCraft-Ready/bin/*.exe; do
            ldd "$exe" | grep -i '/ucrt64/bin/' | awk '{print $3}' | xargs -I '{}' cp -n '{}' HeroCraft-Ready/bin/
          done
          
      - name: Upload HeroCraft Playable Game
        uses: actions/upload-artifact@v4
        with:
          name: HeroCraft-1-0-Final-Binary
          path: HeroCraft-Ready/

بمجرد أن يتم عمل push سيبدأ GitHub بعملية البناءK ,خطوة Download IrrlichtMt ستجلب الملف المفقود irrTypes.h وتوفره للمترجم.

عند انتهاء العملية بالنجاح بعلامة صح الخضراء، سيتم إنشاء مجلد كامل اسمه HeroCraft-1-0-Final-Binary لن يحتوي على الـ EXE فقط، بل على مجلد bin الذي يضم الـ EXE بجانب كل ملفات الـ DLL التي يحتاجها الويندوز، بالإضافة لمجلدات اللعبة الأساسية.

يمكنك تحميله، ضغطه كملف ZIP، وإرساله لأصدقائك وسيتمكنون من اللعب بمجرد فتح الـ EXE.

  • 0
نشر

هل تستطيع مساعدة في تحويل الى مشروع الى صيفة exe من فضلك 

  • 0
نشر
بتاريخ On 28‏/3‏/2026 at 11:46 قال محمد علي علي الحومي:

مانفع هل هناك طريقة بسيطة 

قم بتغيير المترجم الذي تستخدمه في ملف إعدادات GitHub Actions أي ملف الـ .yml حيث لا تستطيع استخدام MinGW GCC لبناء المشروع على بيئة ويندوز.

ابحث عن الخطوة التي تحدد الـ Compiler وقم بتغييرها من GCC (MinGW) إلى MSVC أو Clang.

  • 0
نشر
بتاريخ On 30‏/3‏/2026 at 02:16 قال محمد علي علي الحومي:

يعنى غير GCC (MinGW) الى MSVC

نعم فالمشكلة واضحة من خلال سجل الأخطاء (Log) المرفق في الصورة السابقة فعملية البناء (Build) تفشل لأن المشروع يرفض استخدام المترجم MinGW GCC.

ولحل هذه المشكلة يجب عليك تعديل ملف GitHub Actions أى ملف .yml الخاص بال Workflow واستبدال MinGW بمترجم آخر مدعوم ولديك خياران أساسيان:

  • استخدام مترجم MSVC وهو الخيار الأسهل والموصى به لبيئة ويندوز :
    • ففي خطوة CMake إذا كان ملف ال Workflow يحتوي على أمر التهيئة باستخدام MinGW مثل -G "MinGW Makefiles" قم بإزالته بالكامل ليأخذ MSVC كافتراضي أو قم بتغييره إلى -G "Visual Studio 17 2022".
    • وأخيرا تأكد من إزالة أي خطوات في الـ Workflow تقوم بتثبيت MinGW أو إعداد متغيرات البيئة (CC و CXX) لتشير إلى gcc و g++.
  • الخيار الثاني استخدام مترجم Clang.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...