سؤال

هل من الصحيح أن رابط مكتبة ثابتة (.ليب) جمعت مع VS 2005 مع البرنامج والتي جمعت مع VS عام 2008 ؟ كل من مكتبة البرنامج مكتوب في C++.هذا البرنامج هو تشغيل على ويندوز موبايل 6 المهنية المحاكي.

يبدو أن هذا العمل لا توجد أخطاء الارتباط.ومع ذلك تعطل البرنامج أثناء بدء التشغيل بسبب أشياء غريبة تحدث داخل ربط المكتبة.E. g.ليب يمكن العودة متجه من الشخصيات مع حجم كبير عدد سالب.

لا توجد مثل هذه المشاكل عند ترجمة البرنامج مع VS 2005.

ما هو أكثر من الغريب المشكلة فقط عند استخدام الإصدار التكوين من أجل بناء.عند تجميع باستخدام التصحيح التكوين المشكلة لا تحدث.

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

المحلول

VS2005 و VS2008 استخدام تطبيقات الخاصة بلبنان.عندما VS2005 رمز إرجاع ناقل ، كائن تخطيط الذاكرة يختلف عن ما VS2008 تتوقع.التي ينبغي أن تكون السبب في كسر القيم التي تراها في إرجاع التاريخ.

وكقاعدة عامة من الإبهام, يجب عليك دائما تجميع كافة C++ وحدات المشروع مع نفس المترجم وجميع الإعدادات/#تعرف على قدم المساواة.

واحد خاص #تعريف يسبب سلوك مماثل هو SECURE_SCL #تعريف من VS2008.اثنين من وحدات تجميع مع إعدادات مختلفة سيخلق بالضبط المشاكل الخاصة بك, لأن #تحديد SECURE_SCL يقدم المزيد من الأعضاء المتغيرات المختلفة C++ مكتبة دروس.

نصائح أخرى

انها ليست صحيحة رابط اكبر مكتبة في طريقة لوصف لكن هذا لا يفاجئني أنك ترى بعض السلوك الغريب.زوجين التعقل الشيكات:

  • هي كل الملفات باستخدام نفس الإصدارات من نفس مكتبات وقت التشغيل?
  • هو الخاص بك .EXE تطبيق "رؤية" رأس نفس الملفات .ليب بنيت ضد ؟ تأكد من أن _WIN32_WINNT (.... الخ) وحدات الماكرو أعلن بشكل صحيح.

وعندما تقول .LIB, هل يعني صحيح ثابت المكتبة (mylib.ليب) أو استيراد مكتبة DLL (mylib.lib -> mylib.dll)?

وما هي ترجمة/رابط إعدادات VS2008 للتنفيذ المشروع ؟

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