Quel mal peut-il y avoir à définir BOOST_DISABLE_ABI_HEADERS lors de la compilation de boost?

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

  •  03-07-2019
  •  | 
  •  

Question

Quel mal peut causer la définition de BOOST_DISABLE_ABI_HEADERS lors de la compilation de boost?

À partir du fichier boost: 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

Pourquoi Boost ressent-il le besoin de contrôler le compactage et l'alignement des structures?

Est-ce que cela a à voir avec la sérialisation boost et de s’assurer que cela fonctionne de la même manière sur toutes les plateformes? Si je n’utilise que Windows, puis-je définir cela en toute sécurité?

Était-ce utile?

La solution 3

Voici un aperçu de la définition de BOOST_DISABLE_ABI_HEADERS:

  • Si vous utilisez des dll renforcées partagées, vous obtiendrez un comportement non défini
  • Si vous vous connectez de manière statique à vos bibliothèques boost, ou si vous êtes sûr que vous n'utilisez que vos propres dlls, alors vous pouvez être en sécurité, continuez à lire pour savoir pourquoi je dis may.
  • Si vous utilisez plusieurs projets .lib dans votre projet, ils doivent tous avoir les mêmes paramètres de compilateur, car une modification de ceux-ci peut modifier la compression et l'alignement.
  • Je soupçonne que la compatibilité entre différents systèmes d'exploitation et plates-formes (x86 vs x64) peut ne pas fonctionner pour des tâches telles que la sérialisation avancée.

Dans l’ensemble, il n’est pas très sûr de définir ceci et beaucoup plus sûr de le laisser seul.

Autres conseils

La définition assure que l'interface ABI ( interface binaire d'application ) reste compatible entre les versions et les compilateurs. . Sans cela, votre application ne pourrait pas utiliser les DLL améliorées installées par une autre application (qui aurait pu être compilée avec un compilateur différent du vôtre).

Si vous établissez une liaison statique pour renforcer ou si vous pouvez être sûr que votre application utilise uniquement les dll supplémentaires que vous avez compilées, alors vous pouvez définir ce paramètre en toute sécurité. Cependant, si vous ne pouvez pas en assurer la validité, vous ne devez pas le définir.

Voici ce que j'ai pu trouver dans la documentation Boost: http://www.boost.org/doc/libs/ 1_31_0 / libs / config / config.htm

C’est pour une version assez ancienne, mais on peut présumer que la signification de #define n’a pas changé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top