2013-01-25 8 views
5

Abbiamo un'implementazione di libreria legacy e file di intestazione esposti associati. Recentemente abbiamo scoperto che, alcune delle funzioni nel file di intestazione esposto, non hanno definizioni corrispondenti nell'implementazione della libreria.Come scoprire le funzioni mancanti da una libreria, ma che sono presenti nel file di intestazione esposto rilasciato insieme alla libreria?

Vogliamo verificare se potrebbero esserci altre funzioni di questo tipo. C'è un modo più semplice di fare questo anziché setacciare ogni API presente nell'intestazione e quindi controllare se esiste una definizione per esso?

risposta

1

È possibile generare la sorgente C dall'intestazione (Perl è una strada da percorrere!) Che chiama tutte le funzioni e tenta di compilarlo. Linker si lamenterà delle funzioni mancanti.

0

Se questa è la C, si può fare qualcosa di simile:

printf("", /* insert all functions here */); 

che li dovrebbe passare come puntatori a funzione per printf. Quelli che non esistono dovrebbero apparire come errori del linker.

(In C++, si dovrebbe elencare sovraccarichi in modo esplicito, che lo rende un po 'più difficile.)

+0

Ma devo passare argomenti validi a tutte le funzioni che possono essere frettolose di corso creando argomenti fittizi. –

+0

@Sibrajas, non se si passano le funzioni come puntatori di funzione. Se vuoi essere esplicito, puoi usare qualcosa come: 'printf (" ", & mylibfunc1, & mylibfunc2/* più funzioni vai qui * /);' – MSN

0

sarei propenso a utilizzare ctags per generare una lista di identificatori dal file di intestazione quindi utilizzare ar , emfar o elfdump in Unix o lib.exe o dumpbin.exe in Windows (vedere la discussione here) per scaricare un elenco di identificativi dalla libreria e quindi ordinare e diff i due elenchi.

1

Tentare di creare il file di dump ABI dal abi-compliance-checker strumento:

abi-compliance-checker -lib NAME -dump DESC.xml 

DESC.xml file è il seguente:

<version> 
    1.0 
</version> 

<headers> 
    /path(s)/to/headers 
</headers> 

<libs> 
    /path(s)/to/libraries 
</libs> 

La risultante ABI discarica di file conterrà le informazioni che necessità di simboli dichiarati nei file di intestazione (SymbolInfo) e simboli esportati da librerie condivise (Symbols).

È inoltre possibile generare dump ABI nel formato xml aggiungendo l'opzione --xml.

Problemi correlati