الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

اسئلة حول ال Cross-Platform في C++

بدأه Install في 12 فبراير 2014 · 2 رد · 866 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته 

كيف حالكم اخواني الاعزاء

 

احببت ان اسئل

لو سويت تطبيق في c++ من Virtual Machine تحوي windows XP

ونقلته للنظام الرئيسي Windows 7 هل سيعمل 

 

ولو قمت بنقله لجهاز صديقي الذي يستخدم نظام Windows 8.1 هل سيعمل ؟؟؟؟؟

 

وماذا بخصوص الــ 32Bit/64Bit

 

ارجوا من الخبراء إفادتي ولكم جزيل الشكر 

{ وَيَوْمَ تَقُومُ السَّاعَةُ يُقْسِمُ الْمُجْرِمُونَ مَا لَبِثُوا غَيْرَ سَاعَةٍ ۚ كَذَٰلِكَ كَانُوا يُؤْفَكُونَ () وَقَالَ الَّذِينَ أُوتُوا الْعِلْمَ وَالْإِيمَانَ لَقَدْ لَبِثْتُمْ فِي كِتَابِ اللَّهِ إِلَىٰ يَوْمِ الْبَعْثِ ۖ فَهَٰذَا يَوْمُ الْبَعْثِ وَلَٰكِنَّكُمْ كُنْتُمْ لَا تَعْلَمُونَ } الروم 55-56

#2

هذا يعتمد على أشياء منها:

 

المعالج، لابد أن يدعم المعالج المعمارية التي يستخدمها البرنامج. مثلاً لو بنيت برنامجك على معالج arm فلن يعمل على معالجات أنتل. أيضاً لو بنيته لمعالج 64 بت من أنتل فلن يعمل على 32 بت، العكس ممكن في وضع المحاكاة.

 

أيضاً في حالات قد تبني البرنامج ليستخدم تعليمات موجودة في إصدار حديث من المعالج، فلن تعمل على جيل قديم من نفس المعالج. مثلاً لو كان برنامجك يستخدم تعليمات sse3 (تعليمات sse تستخدم لتسريع البرنامج عن طريق إجراء عمليات رياضية أو منطقية على مجموعة بيانات دفعة واحدة) وحاولت تشغليه على معالج من جيل أقدم لايدعمها كالأجيال الأولى من بنتيوم فلن تعمل رغم أنها كلها 32 بت (المعالج غالباً سيوقف البرنامج ويعمل استثناء "تعليمة خاطئة" bad instruction).

 

لكن غالباً المصرف سيبني البرنامج لأقل معمارية مدعومة (مثل i386) مالم تطلب منه غير ذلك.

 

نظام التشغيل، طبعاً برنامج عملته على ويندوز لن يعمل على لينكس، إلا بوجود نوع من طبقة محاكاة، مثل wine التي تستخدم لمحاكاة برامج ويندوز في لينكس، أيضاً ويندوز 32 بت يوفر طبقة محاكاة لبرامج دوس، freebsd يمكن تركيب طبقة محاكات لبرامج لينكس.

 

أحياناً تستخدم دالة من دوال النظام أضيفت في إصدارات حديثة، إذا جربت تشغيل البرنامج على نسخة قديمة من النظام فلن تعمل لأن النظام لم يجد تلك الدالة. مثل دالة GetTcpTable2، أقل إصدار يدعمها فيستا، لن تعمل على xp وماسبقه.

 

الأخيرة وهي مكتبات الربط الديناميكي، أحياناً تبني برنامجك وهو يستخدم مكتبة dll معينة ولاتدرجها مع برنامجك. لن تعمل في نظام لاتتوفر به هذه المكتبة. الحل أن تنشر المكتبات التي يستخدمها برنامجك معه.

 

لتفادي مثل هذه المشكلة يمكنك تجربة برنامجك على نظام نظيف (لم تركب عليه أي برنامج) ويمكنك استخدام أدوات مثل dependency walker لمعرفة مكتبات الـdll التي تنقص برنامجك.

 

هذه الأشياء تهمك إذا كنت تبني برنامج كبير، إما إذا كان برنامجك برنامج c/c++ صغير فغالباً لن تجد مشاكل، فقط إذا كنت تستخدم فجيول c++ تأكد فقط من أنك تبني البرنامج في وضع النشر release (المصرف يتسخدم مكتبات مختلفة إذا بنيته في وضع التنقيح)، ويمكنك أيضاً الذهاب إلى:

project > properties > configuration properties > c/c++ > code generation

وتغيير خيار runtime library إلى multi-threaded (/mt)، سيضمن مكتبة msvcrX.dll في برنامجك، هذه المكتبة أكثر المكتبات إزعاج.

تم تعديل هذه المشاركة بواسطة Mr.B في 13 فبراير 2014 في 13:27

5
#3

ماشاء الله تبارك الله

بارك الله فيك يااخي العزيز افدتني جزاكم الله خير .

اقتباس

 

 

أحياناً تستخدم دالة من دوال النظام أضيفت في إصدارات حديثة

هههه مشكلة والله .؟ طيب برأيك فيني اخلي البرنامج حسب نظام التشغيل يستخدم دوال مثلاً 

دالة لها علاقة بالتعامل مع النوافذ المفتوحة  موجودة في XP و 7 ولكن غير موجودة في 8 مثلاً 

هل يمكن بطريقة ما ان اجعل البرنام يختبر النظام الذي يعمل عليه فلو عمل على 8 يستخدم الدالة الحديثة المضافة في 8 ولو في بقية الانظمة يستخدم الدالة العادية ؟؟

هل هي طريقة عملية وهل يمكن فعلها برايك اخي العزيز ؟؟

 

اقتباس

 

 

نظام التشغيل، طبعاً برنامج عملته على ويندوز لن يعمل على لينكس

 

آه طبعاً اخي العزيز اعرف ذلك ولكن كنت اقصد بال Cross-Platform هو المعالج بالذات ونظم Windows ذات الإصدارات المختلفة لانني كدت اصاب بهستيريا عندما نسخت ملف IDM مكرك من Virtual Machine فيها Windows xp SP3 إلى نظامي الأصلي Windows 7 والبرنامج اشتغل مثل ما هو من دون مشاكل ؟؟!!! 

 

هل لديك تفسير لذلك مع العلم ان IDM مبرمج بالــ C++ وهل يمكن ان افعل ذلك انا ايضاً بتطبيقاتي

 

اقتباس

 

 

لتفادي مثل هذه المشكلة يمكنك تجربة برنامجك على نظام نظيف (لم تركب عليه أي برنامج) ويمكنك استخدام أدوات مثل dependency walker لمعرفة مكتبات الـdll التي تنقص برنامجك.

 

شكرا لك اخي لم اكن اعرف اي شيء عن هذه الاداة شكرا على المعلومة 

 

اقتباس

 

 

 فقط إذا كنت تستخدم فجيول c++ تأكد فقط من أنك تبني البرنامج في وضع النشر release

مالفرق بين وضع النشر ووضع التنقيح ؟؟؟؟

انا استخدم GCC Compiler ببرنام Code::Blocks لانني شعرت انني لو استخدم الكومبايلر GCC سوف يكون لدى برنامجي قدرة حمولة Portable "اقصد بالتنقل بين نسخ Windows " اكثر بكثير من حالة لو استخدمت 

كومبايلر خاص ب Microsoft 

 

طبعاً الــ GUI لها ترتيب آخر انا فقط اتدرب حالياً على Code::Blocks 

اقتباس

 

 

وتغيير خيار runtime library إلى multi-threaded (/mt)، سيضمن مكتبة msvcrX.dll في برنامجك، هذه المكتبة أكثر المكتبات إزعاج.

ما هو هذا الخيار اخي وماذا يفعل ؟؟؟ 

 

 

وجزااااك الله الف خير يااخي وشكرا على المساعدة .

−1

{ وَيَوْمَ تَقُومُ السَّاعَةُ يُقْسِمُ الْمُجْرِمُونَ مَا لَبِثُوا غَيْرَ سَاعَةٍ ۚ كَذَٰلِكَ كَانُوا يُؤْفَكُونَ () وَقَالَ الَّذِينَ أُوتُوا الْعِلْمَ وَالْإِيمَانَ لَقَدْ لَبِثْتُمْ فِي كِتَابِ اللَّهِ إِلَىٰ يَوْمِ الْبَعْثِ ۖ فَهَٰذَا يَوْمُ الْبَعْثِ وَلَٰكِنَّكُمْ كُنْتُمْ لَا تَعْلَمُونَ } الروم 55-56

مواضيع مشابهة