Welcher Schaden kann herkomme BOOST_DISABLE_ABI_HEADERS definieren, wenn Schub Kompilieren?

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

  •  03-07-2019
  •  | 
  •  

Frage

Welcher Schaden kann von BOOST_DISABLE_ABI_HEADERS definieren, wenn Schub Kompilieren?

Von der Boost-Datei: 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

Warum fühlt sich boost die Notwendigkeit struct Verpackung und Ausrichtung zu kontrollieren?

Hat es um vielleicht mit Boost-Serialisierung zu tun und sicherstellen, dass es das gleiche auf allen Plattformen funktioniert? Wenn ich Fenster renne nur, kann ich dies sicher definieren?

War es hilfreich?

Lösung 3

Hier ist ein Überblick über die Definition BOOST_DISABLE_ABI_HEADERS:

  • Wenn Sie einige Shared-Boost-DLLs verwenden, werden Sie nicht definiertes Verhalten bekommen
  • Wenn Sie statisch auf Ihre Boost-Bibliotheken verknüpfen, oder Sie sind sicher, dass Sie mit Ihrem eigenen DLLs nur dann können Sie sicher sein, lesen Sie, warum ich sagen kann.
  • Wenn Sie Schub in mehreren .libs in Ihrem Projekt verwenden müssen sie alle die gleichen Compiler-Einstellungen als eine Änderung in einer Compiler Einstellung kann die Verpackung und Ausrichtung anders.
  • würde ich die Kompatibilität zwischen verschiedenen Betriebssystemen und Plattformen (x86 vs x64) vermuten kann für Dinge wie Boost-Serialisierung nicht funktionieren.

Insgesamt ist es nicht sehr sicher, dies zu definieren und viel sicherer, es allein zu lassen.

Andere Tipps

Die Definition stellt sicher, dass das ABI ( Application Binary Interface ) bleibt kompatibel zwischen Versionen und Compiler . Ohne das könnte Ihre Anwendung nicht die Boost-DLLs von einer anderen Anwendung installiert verwenden (die mit einem anderen Compiler kompiliert könnte als Ihr wurden).

Wenn Sie eine Verknüpfung statisch aufzuladen oder wenn Sie versichern, dass Ihre App verwendet nur die Boost-DLLs Sie sich für sie zusammengestellt, dann ja, können Sie dies sicher definieren. Wenn Sie jedoch, dass nicht zusichern können, müssen Sie es nicht definieren.

Hier ist, was ich auf dem Boost-docs finden könnte: http://www.boost.org/doc/libs/ 1_31_0 / libs / config / config.htm

Es ist eine ziemlich alte Version, aber vermutlich hat sich die Bedeutung des #define nicht geändert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top