2010-04-24 26 views
16

Tengo un pequeño problema: tengo que abrir un archivo de enlazador que tiene la extensión .a. Yo uso Dev-C++.Cómo abrir un archivo .a

+0

Hola Ale, ¿puedes mostrarnos qué has encontrado hasta ahora? –

+2

@Mgst: ¿Qué estás tratando de lograr? –

+0

¿Qué quiere decir con "abrir"? – zvrba

Respuesta

20

.a archivos son ar archivos (algo así como archivos comprimidos) de archivos de objeto (.o). Se pueden listar los archivos en .a archivo usando ar programa:

ar t file.a 

y extraer todos los archivos:

ar x file.a 
1

Pruebe fstream, o fstream file_op("c:\\test.a",ios::in);, y no olvide incluir fstream.h.

+3

Eso es quizás lo que él pidió, pero probablemente no lo que realmente quería. – Clifford

+2

@Clifford Pero es el problema o la pregunta, pero no la respuesta. Entonces, ¿por qué -1? –

+3

@Draco Ater: No lo voté (suposición). Algunas veces se puede hacer una pregunta sin suficiente conocimiento técnico o terminología correcta para expresarla claramente, y sospecho que esta es una situación tal. Se debe aplicar Navaja de Occam; pregúntese "¿Por qué alguien (especialmente un novato) desea * abrir * un archivo en lugar de simplemente * usarlo * de la manera normal al vincularlo?". Además, mencionó el IDE en uso, lo que sugiere que necesita saber cómo usar la biblioteca en el IDE no en el código. Lea los comentarios y respuestas de otros para ver por qué esta puede no ser la respuesta. – Clifford

3

Los archivos con la extensión .a son bibliotecas estáticas que utilizan convenciones de nomenclatura de archivos Unix. No son mucho más que una colección indexada de código objeto. No los abra tanto (a menos que tenga una herramienta como nm o gdb disponible, las cuales pueden hacer cosas sensatas con una biblioteca si no necesariamente lo que desea) como decirle al vinculador que las use cuando enlace. Con la mayoría de los enlazadores, es importante colocar todas las bibliotecas (tanto estáticas como dinámicas/compartidas) después de su código de programa principal en la línea de comando del enlazador y el orden de las bibliotecas también.

+0

nm en particular funcionó para mis propósitos. ¡Gracias! – AWrightIV

2

¿Realmente quiere decir que desea abierta el archivo, o más bien que desea enlace con su código?

Dev-C++ se instala por defecto con el compilador MinGW/GCC. Si el archivo no está específicamente diseñado para funcionar con MinGW (por ejemplo, puede ser un archivo Cygwin o Linux), no podrá vincularlo con el código generado por MinGW.

Si el archivo es una biblioteca compatible MinGW/GCC, simplemente lo vincula a su código. En Dev-C++ necesita agregar el archivo a las opciones del vinculador del proyecto, agregando la ruta completa al archivo (hay un botón para eso en las opciones del proyecto) o colocando el archivo en una ruta definida por una opción -L<path> y luego agregar una opción -l<archive>. Tenga en cuenta que el ID del archivo se llama libXXX.a, entonces la opción -l<archive> será `-lXXX '; el prefijo "lib" y la extensión ".a" están implícitos.

Si simplemente desea inspeccionar un archivo para determinar qué símbolos externos proporciona, entonces la utilidad nm se puede usar para eso. Si desea extraer los archivos de objetos individuales, use el ar, aunque no puedo pensar en una buena razón por la que quiera hacer cualquiera de los dos.

Cuestiones relacionadas