ما هي بعض التوصيات لنقل كود C++ إلى نظام التشغيل MacOS؟[مغلق]

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

  •  02-07-2019
  •  | 
  •  

سؤال

بالنسبة لمشروع قادم، هناك خطط لنقل كود C++ الحالي الذي يتم تجميعه على نظامي التشغيل Windows وLinux إلى نظام التشغيل MacOS (leopard).البرنامج عبارة عن تطبيق سطر أوامر، ولكن قد يتم التخطيط لواجهة أمامية لواجهة المستخدم الرسومية.يستخدم نظام التشغيل MacOS برنامج التحويل البرمجي g++.من خلال وجود نفس المترجم مثل Linux، لا يبدو أنه ستكون هناك أية مشكلات، ولكنها موجودة دائمًا.

هل هناك أي توصيات أو مشاكل يجب الانتباه لها أثناء المنفذ؟

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

المحلول

هل يحتوي تطبيقك على واجهة مستخدم رسومية، وأي واجهة (أصلية / Qt / Gtk+)؟

إذا لم يكن الأمر كذلك، فإن المشكلات التي يجب الانتباه إليها (مقارنة بنظام التشغيل Linux) تكون بشكل أساسي في منطقة الارتباط الديناميكي.يستخدم OS X "-dylib" و"-bundle" ويحتوي في الواقع على نوعين من المكتبات الديناميكية (قابلة للتحميل في وقت التشغيل والمكتبات العادية).لدى Linux نوع واحد فقط (-مشترك)، وهو أكثر مرونة في هذا الأمر على أي حال.

إذا كان تطبيقك يحتوي على واجهة مستخدم رسومية، فستحتاج إلى إعادة ترميز كل شيء في Cocoa، باستخدام Objective-C.وهذا يعني أنك سوف تكون في الجديد لغة أيضًا.استخدم بعض الأشخاص (مثل MS) Carbon (C++ API)، ولكن يتم التخلص منه تدريجيًا.لا أوصي بذلك للمشاريع الجديدة.

حظك الأفضل هو استخدام Qt أو Gtk+.تم (إعادة) الإعلان عن منفذ Gtk+ الأصلي منذ بضعة أيام فقط (انظر إيمينديو).

ملاحظة.يقوم OS X بالطبع بتشغيل ثنائيات X11 أيضًا، ولكن قد يكون دفع ذلك إلى أي من عملائك طريقًا صعبًا.لقد اعتادوا على واجهة Aqua، وكانوا منتجين في ذلك.اعتبر X11 حلاً قصير المدى فقط.

ص.عدد libs الإضافية مفتوحة المصدر التي تأتي مع OS X محدود، وقد لا تكون إصداراتها متخلفة.بينما في Linux، يمكنك بسهولة أن تطلب من المستخدمين تثبيت "libxxx v.y.y"، بينما في OS X هناك طرق متعددة للتعبئة (fink، macports) وبالنسبة للأداة التجارية، من المتوقع تضمين المكتبات المطلوبة في التطبيق.يقدم OS X "حزم التطبيقات" و"أطر العمل" لهذا الغرض (نسخ محلية، مما يجعل التطبيق مكتفيًا ذاتيًا).ليس لدى Linux مثل هذا المفهوم.سيكون لهذا تأثيرًا كبيرًا على نظام البناء الخاص بك أيضًا؛ربما تريد تجربة شيء مثل سلبيات لجميع المنصات؟

نصائح أخرى

لا تحتاج إلى إعادة ترميز كل شئ إلى الهدف-C.هناك تقليد غريب لـ C++ وObjective-C والذي سيسمح لك باستخدام كود C++ من Objective-C، بحيث يمكنك بذكاء تقسيم كود النموذج في C++ وكود العرض/وحدة التحكم في Objective-C.لاستخدام Objective-C، ما عليك سوى إضافة لاحقة ملفات التعليمات البرمجية المصدر الخاصة بك بـ .mm بدلاً من .m، ويمكنك مزج معظم تركيبات C++ القانونية وObjective-C حتى على نفس السطر.

لم نقم بالترقية إلى MacOS، ولكننا قمنا بالنقل إلى العديد من أنظمة Unixes من Linux، وكانت منطقة العمل الرئيسية هي التثبيت وأنظمة بدء التشغيل، لذا توقع وضع معظم العمل هناك (نظرًا لأن نظامك الحالي محمول بالفعل بين Linux والويندوز).

Macintosh (macosx) هو في الأساس FreeBSD تحت الغطاء (على الرغم من أنه تم تعديله).هناك بعض الاختلافات في برمجة الأنظمة بين Linux وFreeBSD.في المقام الأول توجد هذه الاختلافات بين استدعاءات النظام المختلفة ...لذا، سيتم تحديد مدى تأثير ذلك عليك من خلال ما يفعله تطبيقك ونوع مكالمات نظام التشغيل التي تجريها أثناء التنفيذ.

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