Quale danno può derivare dalla definizione di BOOST_DISABLE_ABI_HEADERS durante la compilazione di boost?

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

  •  03-07-2019
  •  | 
  •  

Domanda

Quale danno può derivare dalla definizione di BOOST_DISABLE_ABI_HEADERS durante la compilazione di boost?

Dal file 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

Perché boost sente la necessità di controllare l'imballaggio e l'allineamento della struttura?

Forse ha a che fare con l'aumento della serializzazione e assicurarsi che funzioni allo stesso modo su tutte le piattaforme? Se eseguo solo Windows, posso definirlo in sicurezza?

È stato utile?

Soluzione 3

Ecco un riassunto della definizione di BOOST_DISABLE_ABI_HEADERS:

  • Se usi alcune dll boost condivise, otterrai un comportamento indefinito
  • Se ti colleghi staticamente alle tue librerie boost, o sei sicuro di utilizzare solo le tue dll, allora potresti essere al sicuro, continua a leggere per quale motivo dico io.
  • Se si utilizza boost in diversi file .libs nel progetto, devono avere tutte le stesse impostazioni del compilatore poiché una modifica in un'impostazione del compilatore può rendere diversi l'imballaggio e l'allineamento.
  • Sospetto che la compatibilità tra diversi sistemi operativi e piattaforme (x86 vs x64) potrebbe non funzionare per cose come aumentare la serializzazione.

Nel complesso non è molto sicuro definirlo e molto più sicuro lasciarlo da solo.

Altri suggerimenti

La definizione assicura che l'ABI ( interfaccia binaria dell'applicazione ) rimanga compatibile tra versioni e compilatori . Senza quello, la tua applicazione non potrebbe usare le dll boost installate da un'altra applicazione (che potrebbe essere stata compilata con un compilatore diverso dal tuo).

Se stai collegando staticamente per potenziare o se puoi assicurarti che la tua app utilizza solo le boost dll che hai compilato per te, allora sì, puoi definirlo in sicurezza. Tuttavia, se non puoi assicurarlo, non devi definirlo.

Ecco cosa ho trovato nei documenti Boost: http://www.boost.org/doc/libs/ 1_31_0 / libs / config / config.htm

È per una versione abbastanza vecchia, ma presumibilmente, il significato di #define non è cambiato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top