Pregunta

¿Qué daño puede venir de definir BOOST_DISABLE_ABI_HEADERS al compilar boost?

Desde el archivo de impulso: 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

¿Por qué Boost siente la necesidad de controlar el embalaje y la alineación de la estructura?

¿Quizás tenga que ver con aumentar la serialización y asegurarse de que funcione igual en todas las plataformas? Si solo estoy ejecutando Windows, ¿puedo definir esto con seguridad?

¿Fue útil?

Solución 3

Aquí hay un resumen de la definición de BOOST_DISABLE_ABI_HEADERS:

  • Si usa algunos dlls de impulso compartidos, obtendrá un comportamiento indefinido
  • Si vincula estáticamente a sus bibliotecas de impulso, o está seguro de que solo está utilizando sus propios dlls, entonces puede estar seguro, siga leyendo para saber por qué digo que puede.
  • Si usa boost en varias .libs en su proyecto, todas deben tener la misma configuración del compilador, ya que un cambio en la configuración del compilador puede hacer que el empaque y la alineación sean diferentes.
  • Sospecho que la compatibilidad entre diferentes sistemas operativos y plataformas (x86 frente a x64) puede no funcionar para cosas como impulsar la serialización.

En general, no es muy seguro definir esto y es mucho más seguro dejarlo solo.

Otros consejos

La definición asegura que la ABI ( interfaz binaria de aplicación ) sigue siendo compatible entre versiones y compiladores . Sin eso, su aplicación no podría usar los dlls de impulso instalados por otra aplicación (que podría haber sido compilada con un compilador diferente al suyo).

Si está enlazando estáticamente para impulsar o si puede asegurarse de que su aplicación solo use los dlls de impulso que compiló para ello, entonces sí, puede definir esto de manera segura. Sin embargo, si no puede asegurar eso, no debe definirlo.

Esto es lo que pude encontrar en los documentos de Boost: http://www.boost.org/doc/libs/ 1_31_0 / libs / config / config.htm

Es para una versión bastante antigua, pero presumiblemente, el significado de #define no ha cambiado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top