Domanda

Non è molto difficile da rompere binario retro-compatibilità di un / libreria condivisa DSO con un'interfaccia C ++. Detto questo, c'è uno strumento di analisi statica, che può aiutare a rilevare tali pause ABI, se è dato due diversi tipi di file di intestazione: quelle di uno stato precedente del DSO e quelli dello stato attuale (e forse DSO pure)? Entrambi gratuiti e commerciali suggerimenti sui prodotti sono i benvenuti.

Se si potrebbe anche mettere in guardia circa le cattive pratiche, per esempio funzioni inline ei parametri di funzionalità insolute interfacce DSO, sarebbe grande.

È stato utile?

Soluzione

Suppongo che si ha familiarità con questo tutorial: binari problemi di compatibilità con C ++ , se non leggerlo!

Ho sentito parlare di questo strumento: http://ispras.linuxbase.org/index.php/ABI_compliance_checker , tuttavia mai testato o usato uno, in modo da avere nessun parere.

Anche questo può interessare: Creazione della libreria con retrocompatibile ABI che utilizza Boost

Altri suggerimenti

abi-compliance-checker - uno strumento per controllare binario all'indietro / source- compatibilità livello di un C / C ++ libreria condivisa (DSO):

  

Uno strumento per controllare all'indietro compatibilità binaria ea livello di sorgente di una biblioteca / C ++ C. Lo strumento di controllo di intestazione file e le librerie condivise di versioni vecchie e nuove e analizza i cambiamenti nelle API e ABI (ABI = API + compilatore ABI) che possono rompere la compatibilità binaria e / o fonte: variazioni nel chiedere cambiamenti pila, v-tavolo, simboli rimossi , i campi rinominati, ecc.

     

entrare descrizione dell'immagine qui

icheck - interfaccia C ABI / API checker:

  

Uno strumento per controllare staticamente interfacce C per API e modifiche ABI. Tutte le modifiche di tipo dichiarazioni che possono causare cambiamenti ABI dovrebbero essere rilevati, insieme con la maggior parte dei cambiamenti API.   iCheck è destinato all'uso con le librerie, come metodo di prevenzione ABI deriva.

shlib-compat - verifica della compatibilità ABI per le librerie condivise con il simbolo delle versioni:

  

shlib-compat utilizza i simboli di debug nani di ricreare e confrontare le definizioni dei esportato   simboli, compresi argomenti di funzione e tipi strutturali.

Inoltre si potrebbe essere interessato al linux monte inseguitore e noreferrer servizi Linux abi tracker . Essi sono alimentati dallo strumento abi-compliance-checker.

Mi ricordo che al lavoro hanno usato GCC XML per testare la compatibilità binaria. Fondamentalmente ciò che fa è generare una rappresentazione XML dell'albero dell'oggetto compilatore. La teoria che se l'XML è equivalente, essi compatibilità binaria è stata mantenuta.

L'unico modo sicuro per farlo è quello di esportare la libreria utilizzando un'interfaccia C. Una libreria C ++ è compatibile solo con quello compilatore utilizzato per compilarlo.

I nostri href="http://www.semanticdesigns.com/Products/SmartDifferencer/CppSmartDifferencer.html" strumento C ++ intelligente differenziatore confronta due file di origine e differenze rapporti in termini delle strutture linguistiche (identificatori, espressioni, dichiarazioni, ...) e le azioni di modifica plausibili (inserire, eliminare, spostare, copiare, sostituire-identifier, ...).

Non risponde alla domanda ABI direttamente, ma le informazioni che fornisce potrebbe essere piuttosto utile. Un esempio discusso in un'altra risposta è cambiare di rendimento di tipo da struct {a, b} struct {b, a} . SmartDifferencer avrebbe riferito che a è stato spostato. (Nota: uno strumento diff normale avrebbe riferito il che riga contenente la definizione struct è stata modificata, in modo da genere di ottenere le stesse informazioni, ma SmartDifference ignorerà cambiamenti in spazi bianchi / layout e commenti, anche, producendo meno rumore concettuale).

Che nessuno di questi strumenti si riferisce è il cambiamento della definizione di un typedef, è in un altro file di intestazione. Ma poi presumibilmente si potrebbe confrontare tutti i file di intestazione coinvolti. Se non si vuole fare questo manualmente, qualsiasi strumento è in uso deve incluso essenzialmente una completa C ++ parser, nome resolver, e deve confrontare le dichiarazioni di equivalenza. Un altro poster ha suggerito più o meno la risposta: il confronto uscita GCCXML per equivalenza. Non sono sicuro di quanto sia facile che è in pratica; essa non può essere solo "sono i file XML lo stesso in ordine?".

ABI - Application Binary Interface scende al modo in cui il compilatore traduce il codice sorgente nella macchina istruzioni riconoscibili. la stessa linea di sorgente può essere tradotto in diversi flusso di byte, nel programma finale.

un analizzatore statico in esecuzione il codice sorgente non sarà in grado di prevedere come il compilatore tradurlo. tale decisione è fatto nella codifica compilatore o le impostazioni. quindi non credo che un analizzatore statico sarà di aiuto a voi in questo caso.

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