كيفية تجميع لعبة SDL بشكل ثابت على نظام التشغيل Windows

StackOverflow https://stackoverflow.com/questions/115813

سؤال

لقد كنت أحاول إنتاج نسخة "ثنائية فردية" مرتبطة بشكل ثابت من لعبتي لنظام التشغيل Windows.أريد الارتباط بـ sdl وsdl_image وsdl_mixer والتي بدورها تسحب عددًا قليلاً من مكتبات الدعم.لسوء الحظ، لم أجد طريقة لحملهم جميعًا على التجميع والربط باستخدام cygwin/mingw/gcc.بقدر ما أستطيع أن أقول أن جميع الإصدارات العامة الموجودة هي فقط مكتبات/ملفات dll مشتركة.

يرجى ملاحظة أنني لا أتحدث عن الترخيص هنا.سيكون المصدر مفتوحًا وبالتالي فإن GPL/LGPLness الخاصة بـ sdl ليست ذات صلة.

هل كانت مفيدة؟

المحلول

عند تجميع مشروعك، تحتاج إلى إجراء بعض التغييرات فقط على ملف التعريف الخاص بك.

  • بدلاً من sdl-config --libs, ، يستخدم sdl-config --static-libs
  • يحيط باستخدام ما سبق ذكره sdl-config --static-libs مع -Wl,-Bstatic و -Wl,-Bdynamic.هذا يخبر دول مجلس التعاون الخليجي بفرض الارتباط الثابت، ولكن فقط للمكتبات المحددة بينهما.

إذا كان ملف makefile الخاص بك يبدو حاليًا كما يلي:

SDLLIBS=`sdl-config --libs`

تغييره إلى:

SDLLIBS=-Wl,-Bstatic `sdl-config --static-libs` -Wl,-Bdynamic

هذه هي في الواقع نفس الأشياء لك يجب قم بذلك على الأنظمة المشابهة لـ Unix، ولكن عادةً لا يتسبب ذلك في حدوث العديد من الأخطاء في الأنظمة المشابهة لـ Unix إذا كنت تستخدم النظام الأبسط -static العلم إلى دول مجلس التعاون الخليجي، كما هو الحال على نظام التشغيل Windows.

نصائح أخرى

عبر هذا نشر القائمة البريدية لـ SDL يبدو أن أدوات تطوير sdl تأتي مع برنامج نصي sdl-config يمكنك استخدامه مع علامة --static-libs لتحديد إشارات الرابط التي تحتاج إلى استخدامها.

بيئة:جهاز VMWare الظاهري يعمل بنظام التشغيل Windows 7 x64 والمعدات التي قمنا بتطويرها c ++ build 7.4.2.569، complilador g+ + (tdm-1) 4.6.1

بمجرد تثبيت SDL2-2.0.3 API كتكوين Dev c ++، لم يكن من الواضح تمامًا ما قمت به لأن التقليد يتطلب سطر الأوامر.

المشكلة الأولى هي أن Windows 7 يبدو أنه قد غير المنهجية ويذهبون إلى كرته.جرد.المرجع. https://stackoverflow.com/users/464581/cheers-and-hth-alf

بعد العقبة الأولى، أصبح SDL_platform.h سيئًا للغاية، وقد انخفض مرة أخرى، ولا أتذكر المكان الذي قمت بالتنزيل فيه، ولكن التالي لا يعمل في الإصدار المشار إليه.

يجب علينا وضع SDL2.h ls في دليل الملف القابل للتنفيذ.

D:\prg_desa\zsdl2>g++ bar.cpp main.cpp -o pepe1 -ID:\SDL2-2.0.3\i686-w64-mingw32\include\SDL2 -LD:\SDL2-2.0.3\i686-w64-mingw32\lib -lmingw32 -lSDL2main -lSDL2 -mwindow

لقد قمت أخيرًا بتجميع واختبار SDL2.

وذلك لأن مكتبات SDL تخضع لترخيص LGPL.

إذا كنت تريد ربط libs بشكل ثابت (يمكنك القيام بذلك إذا قمت بإعادة ترجمتها.يحتاج الأمر إلى بعض الاختراق في ملفات makefiles بالرغم من ذلك) يجب عليك وضع لعبتك تحت بعض التراخيص المتوافقة مفتوحة المصدر أيضًا.

تأتي مكتبة SDL كمكتبات مشتركة لأن معظم البرامج التي تستخدمها تكون مغلقة المصدر.يأتي التوزيع الثنائي بالشكل الذي يحتاجه معظم الناس.

على نظامي (Ubuntu) لا بد لي من استخدام العلامات التالية:

-Wl,Bstatic -lSDL_image `sdl-config --libs` -lpng12 -lz -ltiff -ljpeg -lasound -laudio -lesd -Wl,-Bdynamic `directfb-config --libs` -lpulse-simple -lcaca -laa -ldl

التي تربط SDL، SDL_الصورة، والعديد من تبعياتها ثابتة.libdl لا تريد أبدًا أن يكون ثابتًا، لذا قم بإنشاء ثنائي ثابت بالكامل يستخدم SDL_الصورة فكرة سيئة.من المحتمل أن يتم جعل Pulse وcaca وaa وdirectfb ثابتة.لم أقطع مسافة كافية لأكتشفهم بعد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top