كيفية تجميع لعبة SDL بشكل ثابت على نظام التشغيل Windows
سؤال
لقد كنت أحاول إنتاج نسخة "ثنائية فردية" مرتبطة بشكل ثابت من لعبتي لنظام التشغيل 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 ثابتة.لم أقطع مسافة كافية لأكتشفهم بعد.