Pergunta

Que mal pode vir de definir BOOST_DISABLE_ABI_HEADERS ao compilar impulso?

A partir do arquivo 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

Por que boost sentir a necessidade de embalagem controle struct e alinhamento?

Será que ela talvez tenha a ver com o aumento de serialização e ter certeza que ele funciona da mesma em todas as plataformas? Se eu estou executando apenas o Windows, eu posso seguramente definir isso?

Foi útil?

Solução 3

Aqui está um resumo de definir BOOST_DISABLE_ABI_HEADERS:

  • Se você usar algumas DLLs impulso compartilhados, você vai ter um comportamento indefinido
  • Se você vincular estaticamente a seus impulsionar bibliotecas, ou você tem certeza que você está usando apenas suas próprias DLLs, então você pode ser seguro, manter a leitura de por isso que digo pode.
  • Se você usar o impulso em vários .libs em seu projeto todos eles devem ter as mesmas configurações do compilador como uma mudança em um ambiente compilador pode fazer a embalagem e alinhamento diferente.
  • Eu suspeito que a compatibilidade entre diferentes OS e plataformas (x86 vs x64) pode não funcionar para coisas como impulso serialização.

No geral, não é muito seguro para definir isso e muito mais seguro para deixá-lo sozinho.

Outras dicas

A definição assegura que o ( Application Binary Interface ) ABI permanece compatível entre versões e compiladores . Sem isso, sua aplicação não poderia usar as DLLs impulso instalados por outro aplicativo (que pode ter sido compilado com um compilador diferente do seu).

Se você está ligando estaticamente para impulsionar ou se você pode garantir que seu aplicativo só usa o impulso DLLs você compilou-se para ele, então sim, você pode seguramente definir isso. No entanto, se você não pode garantir que, você não deve defini-lo.

Aqui está o que eu poderia encontrar sobre os docs Boost: http://www.boost.org/doc/libs/ 1_31_0 / libs / config / config.htm

É uma versão bastante antigo, mas, presumivelmente, o significado da #define não mudou.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top