Domanda

C'è un modo per generare un file di intestazione C ++ per un file obj? O forse c'è un programma di utilità in grado di visualizzare i file obj. Ho già trovato objconv che converte tra i formati, ma non riesco a trovare alcun .h generatore / spettatore.

È stato utile?

Soluzione

Dato il C ++ di tag, la situazione non è del tutto senza speranza come alcune delle altre risposte implica.

In particolare, almeno con la maggior parte dei compilatori C ++, il nome di una funzione verrà storpiato (Microsoft chiama "decorato") per indicare i parametri presi da quella funzione. Lo schema di mutilazione varia da un compilatore all'altro, ma essenzialmente nessuno di loro codifica abbastanza informazioni per voi per ricreare una dichiarazione per la funzione - il tipo di ritorno, il nome della funzione stessa, il nome della classe se si tratta di una funzione membro , e il numero esatto e il tipo di parametri della funzione si aspetta.

Anche se non avrebbe dovuto essere fatto da pressare il nome, un sistema di C ++ non ha alcuna vera scelta ma di includere le informazioni sui parametri nel file oggetto. Quando si esegue l'overload funzioni, il linker ha bisogno di qualche modo per risolvere il quale sovraccarico di collegarsi con una particolare chiamata.

Vorrei aggiungere che l'ordinamento questo tutti fuori può essere un po 'di lavoro anche se - solo per esempio, se il codice include modelli, il nome del simbolo nel file oggetto si espanderà fuori tutti il parametri di modello (compresi i parametri di default). Solo per esempio, si consideri un po 'banale di codice come questo:

#include <vector>
#include <string>

std::vector<std::string> x;

Quando compilo questo con VC ++, e poi fare dumpbin /symbols foo.obj, l'uscita è di circa 75 kilobyte. Anche se il mio codice sorgente appare solo per definire un simbolo, il file oggetto contiene le definizioni per circa 180 simboli, molti dei quali quasi del tutto estranei a tutto ciò che ho scritto a tutti.

E 'anche opportuno ricordare che se il file oggetto è stato compilato con informazioni di debug, che saranno (normalmente) produrre sostanzialmente più informazioni sul tipo (e simili) nel file oggetto pure.

Altri suggerimenti

La tua domanda è codificata con visual-c++ quindi immagino che siete su Windows.

La generazione dei file di intestazione originale di file oggetto non è possibile, dal momento che molto (forse la maggior parte) delle informazioni contenute nel file di intestazione è caduto durante la compilazione del codice sorgente in file oggetto.

Tuttavia, è possibile utilizzare l'utilità dumpbin di ispezionare i file oggetto a un livello molto basso. Le uniche informazioni presenti in un file oggetto che potrebbe essere interessante per voi è l'elenco dei nomi dei simboli che sono definiti nel file oggetto data. Non è possibile ottenere alcuna informazione tipo dal file oggetto però. Quindi non si può dire che tipo di valore di una data funzione prende o si aspetta.

In alcune situazioni (quando tutti gli argomenti sono passati alla funzione tramite lo stack) si potrebbe dire il numero di argomenti che una funzione si aspetta (smontando l'inizio del codice funzione e contando quanti valori vengono estratti dallo stack ). Che non funziona nella stragrande maggioranza dei casi, però.

Non ci può essere un generatore di intestazione, come il file obj non contiene tutte le informazioni che sarebbe necessario in un file di intestazione. Per quanto riguarda il dumping del obj, gli strumenti per farlo sarà compilatore dipendente. Lo strumento di GCC legati per farlo è objdump .

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