ما الضرر الذي يمكن أن يحدث من تحديد BOOST_DISABLE_ABI_HEADERS عند تجميع التعزيز؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

ما الضرر الذي يمكن أن يحدث من تحديد BOOST_DISABLE_ABI_HEADERS عند تجميع التعزيز؟

من ملف التعزيز:Boost_1_37_0\boost\config\user.hpp

// BOOST_DISABLE_ABI_HEADERS: Stops boost headers from including any 
// prefix/suffix headers that normally control things like struct 
// packing and alignment. 
//#define BOOST_DISABLE_ABI_HEADERS

لماذا يشعر التعزيز بالحاجة إلى التحكم في تعبئة الهيكل ومواءمته؟

هل ربما يتعلق الأمر بتعزيز التسلسل والتأكد من أنه يعمل بنفس الطريقة على جميع الأنظمة الأساسية؟إذا كنت أقوم بتشغيل Windows فقط، فهل يمكنني تحديد ذلك بأمان؟

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

المحلول 3

فيما يلي ملخص لتعريف BOOST_DISABLE_ABI_HEADERS:

  • إذا كنت تستخدم بعض ملفات dlls المعززة المشتركة، فسوف تحصل على سلوك غير محدد
  • إذا قمت بالارتباط بشكل ثابت بمكتباتك المعززة، أو كنت متأكدًا من أنك تستخدم ملفات dll الخاصة بك فقط، فقد تكون آمنًا، استمر في القراءة لمعرفة سبب قولي ذلك.
  • إذا كنت تستخدم Boost في عدة .libs في مشروعك، فيجب أن يكون لها جميعًا نفس إعدادات المترجم حيث أن التغيير في إعداد المترجم يمكن أن يجعل التعبئة والمحاذاة مختلفة.
  • أظن أن التوافق بين أنظمة التشغيل والأنظمة الأساسية المختلفة (x86 مقابل x64) قد لا يعمل مع أشياء مثل تعزيز التسلسل.

عمومًا، ليس من الآمن تحديد هذا الأمر، والأكثر أمانًا تركه بمفرده.

نصائح أخرى

ووتحديد يؤكد أن ABI ( واجهة التطبيق ثنائي ) يبقى متوافقة بين إصدارات والمجمعين . دون أن التطبيق الخاص بك لا يمكن استخدام دلس دفعة المثبتة من قبل تطبيق آخر (والتي قد تم تجميعها مع مترجم مختلفة من يدكم).

إذا كنت ربط ثابت لتعزيز أو إذا كنت يمكن أن أؤكد أن التطبيق يستخدم فقط في دلس دفعة لك جمعت نفسك لذلك، ثم نعم، يمكنك تحديد هذه بأمان. ولكن إذا كنت لا يمكن ضمان ذلك، يجب أن لا يحدد ذلك.

إليك ما يمكن أن تجد لي على مستندات دفعة: http://www.boost.org/doc/libs/ 1_31_0 / يبس / التكوين / config.htm

وانها لنسخة قديمة إلى حد ما، ولكن يفترض، معنى # تعريف لم يتغير.

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