Pregunta

¿Hay una manera de generar un archivo de cabecera C ++ para un archivo .obj? O tal vez es que hay una utilidad que puede ver archivos .obj. Ya he encontrado objconv que realiza la conversión entre formatos, pero no puedo encontrar ninguna .h generador / espectador.

¿Fue útil?

Solución

Dada la etiqueta C ++, la situación no es tan desesperada como algunas de las otras respuestas implican.

En particular, al menos con la mayoría de los compiladores de C ++, se ha mezclado el nombre de una función (Microsoft llama "decorada") para indicar los parámetros tomados por esa función. El esquema mangling varía de un compilador a otro, pero esencialmente cualquiera de ellos codifica la información suficiente para que usted pueda volver a crear una declaración de la función - el tipo de retorno, el nombre de la función en sí, el nombre de la clase si se trata de una función miembro , y el número exacto y el tipo de los parámetros de las Espera de función.

A pesar de que no tendría que ser hecho por mangling el nombre, un sistema de C ++ no tiene más remedio que incluir la información de los parámetros en el archivo de objeto. Cuando se sobrecarga funciones, el enlazador necesita alguna manera de distinguir cuál de sobrecarga para enlazar con una llamada particular.

Debería añadir que esta clasificación todos hacia fuera puede ser un poco de trabajo, sin embargo - sólo por ejemplo, si el código incluye plantillas, el nombre del símbolo en el archivo de objeto se expandirá a cabo todos la parámetros de plantilla (incluyendo los parámetros por defecto). Sólo por ejemplo, considere un poco trivial de código como el siguiente:

#include <vector>
#include <string>

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

Cuando compilo esto con VC ++, y luego hago dumpbin /symbols foo.obj, la salida es de unos 75 kilobytes. A pesar de que mi código fuente sólo aparece para definir un símbolo, el archivo objeto contiene las definiciones de alrededor de 180 símbolos, muchos de ellos casi nada que ver con nada de lo que escribí en absoluto.

También vale la pena mencionar que si el fichero objeto se compiló con información de depuración, que la voluntad (normalmente) producen sustancialmente más información de tipo (y tal) en el archivo de objeto también.

Otros consejos

Su pregunta se etiqueta con visual-c++ así que supongo que estás en Windows.

La generación de la cabecera original de los archivos de archivos de objetos no es posible, ya que gran parte (posiblemente más) de la información en los archivos de cabecera se deja caer al compilar el código fuente en archivos objeto.

Sin embargo, puede utilizar la utilidad dumpbin para inspeccionar los archivos de objetos a un nivel muy bajo. La información sólo está presente en un fichero objeto que podría ser interesante para usted es la lista de los nombres de los símbolos que se definen en el archivo de objeto dado. No se puede obtener cualquier información de tipo del embargo fichero objeto. Así que no se puede saber qué tipo de valor de una función dada tiene o espera.

En la siguiente situación (cuando todos los argumentos se pasan a la función a través de la pila) lo que pueda decir el número de argumentos que una función espera (por desmontar el inicio del código de función y contando cuántos valores se extraen de la pila ). Eso no va a funcionar en la gran mayoría de los casos, sin embargo.

No puede ser un generador de cabecera, ya que el archivo .obj no contiene toda la información que sería necesaria en un fichero de cabecera. En cuanto a volcar el obj, las herramientas para hacer que habrá compilador dependiente. La herramienta GCC-relacionado de hacer esto es objdump .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top