Question

Y at-il un moyen de générer un fichier d'en-tête c ++ de pour un fichier .obj? Ou peut-être est-il un utilitaire qui peut afficher les fichiers .obj. Je l'ai déjà trouvé objconv qui convertit entre les formats, mais je ne peux pas trouver un générateur .h / spectateur.

Était-ce utile?

La solution

Compte tenu de la balise C de la situation est pas tout à fait aussi désespérée que quelques-unes des autres réponses impliquent.

En particulier, au moins avec la plupart des compilateurs C ++, le nom d'une fonction sera mutilée (Microsoft appelle « décoré ») pour indiquer les paramètres pris par cette fonction. Le schéma de mutiler varie d'un compilateur à l'autre, mais essentiellement l'un d'eux suffisamment d'informations pour vous code de recréer une déclaration pour la fonction - le type de retour, le nom de la fonction elle-même, le nom de classe si elle est une fonction membre et le nombre exact et le type de paramètres attendus par la fonction.

Bien qu'il ne serait pas à faire par mutiler le nom, un système C ++ n'a pas d'autre choix réel, mais d'inclure des informations paramètre dans le fichier objet. Lorsque vous surcharger les fonctions, l'éditeur de liens a besoin d'un moyen de régler ce qui surcharge le lien avec un appel particulier.

Je dois ajouter que le tri tout cela à peut-être un peu de travail bien - juste par exemple, si le code comprend des modèles, le nom du symbole dans le fichier objet étendra sur tous la les paramètres de modèle (y compris les paramètres par défaut). Juste par exemple, envisager un peu trivial de code comme ceci:

#include <vector>
#include <string>

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

Quand je compile cela avec VC ++, puis faire dumpbin /symbols foo.obj, la sortie est d'environ 75 kilo-octets. Même si mon code source apparaît uniquement pour définir un symbole, le fichier d'objet contient des définitions pour environ 180 symboles, beaucoup d'entre eux presque totalement sans rapport avec tout ce que j'écrit du tout.

Il est également intéressant de mentionner que si le fichier objet a été compilé avec les informations de débogage, qui sera (normalement) produire des informations de type sensiblement plus (et autres) dans le fichier objet aussi bien.

Autres conseils

Votre question est étiqueté avec visual-c++ donc je suppose que vous êtes sous Windows.

Génération des fichiers d'en-tête d'origine sur les fichiers d'objet n'est pas possible, étant donné que beaucoup (sans doute plus) des informations contenues dans les fichiers d'en-tête est tombé lors de la compilation du code source dans des fichiers objets.

Cependant, vous pouvez utiliser l'utilitaire dumpbin pour inspecter les fichiers objet à un très bas niveau. La seule information présente dans un fichier d'objet qui pourrait être intéressant pour vous la liste des noms de symboles qui sont définis dans le fichier objet donné. Vous ne pouvez pas obtenir des informations de type du fichier objet cependant. Donc, vous ne pouvez pas dire quel type de valeur une fonction donnée prend ou attend.

Dans certains cas (lorsque tous les arguments sont passés à la fonction via la pile), vous pourriez peut-être dire le nombre d'arguments qu'attend la fonction (en démontant le début du code de fonction et de comptage le nombre de valeurs sont extraits de la pile ). Cela ne marchera pas dans la grande majorité des cas cependant.

Il ne peut pas être un générateur d'en-tête, comme le fichier .obj ne contient pas toutes les informations qui seraient nécessaires dans un fichier d'en-tête. En ce qui concerne le dumping l'obj, les outils pour faire cela dépendra compilateur. L'outil GCC lié à ce faire est objdump .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top