Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: OmarHack en 21 Junio 2013, 00:21 am



Título: [Resuelto]Para que sirve el archivo con extensión .o que se crea con codeblocks.
Publicado por: OmarHack en 21 Junio 2013, 00:21 am
Tengo un código y lo estoy compilando con varios ide para ver diferencias entre el ejecutable que crean, codeblocks a parte del ejecutable crea un archivo.o y ni idea de para que sirve, por lo que parece el ejecutable no depende el.
Un saludo.


Título: Re: Para que sirve el archivo con extensión .o que se crea con codeblocks.
Publicado por: Caster en 21 Junio 2013, 00:32 am
Es un archivo binario


Título: Re: Para que sirve el archivo con extensión .o que se crea con codeblocks.
Publicado por: -- KiLiaN -- en 21 Junio 2013, 00:35 am
Es un archivo objeto.


Título: Re: Para que sirve el archivo con extensión .o que se crea con codeblocks.
Publicado por: OmarHack en 21 Junio 2013, 00:57 am
Es un archivo objeto.
Ah vale! :)


Título: Re: Para que sirve el archivo con extensión .o que se crea con codeblocks.
Publicado por: Caster en 21 Junio 2013, 01:08 am
¿No es lo mismo?


Título: Re: Para que sirve el archivo con extensión .o que se crea con codeblocks.
Publicado por: OmarHack en 21 Junio 2013, 01:11 am
El binario es el "ejecutable" y el archivo objeto en un archivo que contiene el código que se utiliza para unirlo con otro archivo objeto con el linker y hacer un solo programa no? Se usa para proyectos grandes creo. 


Título: Re: Para que sirve el archivo con extensión .o que se crea con codeblocks.
Publicado por: Caster en 21 Junio 2013, 09:01 am
Según lei yo, el archivo .o contiene el bytecode.


Título: Re: Para que sirve el archivo con extensión .o que se crea con codeblocks.
Publicado por: OmarHack en 21 Junio 2013, 11:18 am
Ahora si que ya no me entero, entonces lo puedo eliminar? O hace que el ejecutable sea más rápido o algo?


Título: Re: Para que sirve el archivo con extensión .o que se crea con codeblocks.
Publicado por: mr.blood en 21 Junio 2013, 12:07 pm
La compilación se divide en varias partes: dos de ellas son la compilación (código objeto) y el enlazado (código máquina).

http://es.wikipedia.org/wiki/Compilador#Proceso_de_compilaci.C3.B3n

Para que resuelvas las dudas que te queden.



Una vez enlazado, es decir, una vez tienes un .exe, puedes borrarlo, ya no es necesario.

Sa1uDoS


Título: Re: Para que sirve el archivo con extensión .o que se crea con codeblocks.
Publicado por: amchacon en 21 Junio 2013, 12:52 pm
Ahora si que ya no me entero, entonces lo puedo eliminar? O hace que el ejecutable sea más rápido o algo?
Lo puedes eliminar y no lo debes eliminar.

Tu imagínate que tienes un gran proyecto que tardase en compilar 20 minutos. Si cada vez que tienes que cambiar una línea de código te tiras 20 minutos no llegas a ninguna parte.

Lo que se hace, es dividir el proyecto en varios archivos cpp. Cada archivo cpp se compila de forma autonóma, después se unén los archivos compilados (linker) y se forma el programa.

De este modo que si cambias una línea de código solo tendrías que compilar ese fichero cpp. Los archivos cpp compilados suelen tener extensión .o. No hay peligro en eliminarlos pero después tendrías que volver a compilarlos desde 0.

¿Cómo se hace un proyecto con varios archivos? En Codeblocks está chupado (File -> New Emply file y lo guardas con extensión .cpp). He aquí un ejemplo con 3 archivos (uno de cabecera hpp):

Main.cpp

Código
  1. #include <iostream>
  2. #include <map>
  3. #include <vector>
  4. #include <sstream>
  5.  
  6. // Archivo de declaraciones
  7.  
  8. #include "Funciones.hpp"
  9.  
  10. using namespace std;
  11.  
  12. typedef void (*Puntero_A_Funcion)(void);
  13.  
  14. int main()
  15. {
  16.    void (*Funcion)(void); // Puntero a funcion sin argumentos
  17.    string Mensaje;
  18.    map<string,Puntero_A_Funcion> Comandos;
  19.    vector<string> texto;
  20.    string str;
  21.  
  22.    Comandos["write"] = Escribir;
  23.    Comandos["copy"] = Copiar;
  24.    Comandos["cut"] = Cortar;
  25.    Comandos["delete"] = Borrar;
  26.    Comandos["Destroy"] = Destruir;
  27.    Comandos["Kill"] = Matar;
  28.  
  29.    getline(cin, str);
  30.    stringstream is(str);
  31.  
  32.    while(is >> str) texto.push_back(str);
  33.  
  34.    cout <<"Las palabras que pusiste son: " << endl;
  35.  
  36.    for (int i = 0; i < texto.size(); i++)
  37.        cout << i + 1 << ". " << texto[i] << endl;
  38.  
  39.    cout << endl;
  40.  
  41.    for (int i = 0; i < texto.size(); i++)
  42.    {
  43.        Funcion = Comandos[texto[i]]; // Obtengo el puntero a la funcion correspondiente
  44.  
  45.        if (Funcion) // Si existe la funcion
  46.              Funcion(); // llamar a la funcion
  47.        else
  48.             cout<<"Error, no existe el comando introducido: "<<texto[i]<<endl;
  49.    }
  50.  
  51.    return 0;
  52. }

Funciones.hpp

Código
  1. // Se le dice al compilador que este archivo es de "inclusión única"
  2.  
  3. #pragma once
  4.  
  5. // Prototipos de las funciones
  6.  
  7. void Copiar();
  8. void Escribir();
  9. void Cortar();
  10. void Borrar();
  11. void Destruir();
  12. void Matar();
  13.  

Funciones.cpp

Código
  1. // Incluimos el archivo con los prototipos
  2.  
  3. #include "Funciones.hpp"
  4.  
  5. // Definiendo las funciones
  6.  
  7. void Escribir()
  8. {
  9.    cout<<"Has escrito write"<<endl;
  10. }
  11.  
  12. void Cortar()
  13. {
  14.    cout<<"Has escrito cortar"<<endl;
  15. }
  16.  
  17. void Copiar()
  18. {
  19.    cout<<"Has escrito copiar"<<endl;
  20. }
  21.  
  22. void Borrar()
  23. {
  24.    cout<<"Has escrito borrar"<<endl;
  25. }
  26.  
  27. void Destruir()
  28. {
  29.    cout<<"has escrito destruir"<<endl;
  30. }
  31.  
  32. void Matar()
  33. {
  34.    cout<<"has escrito matar"<<endl;
  35. }
  36.  


Título: Re: Para que sirve el archivo con extensión .o que se crea con codeblocks.
Publicado por: Caster en 21 Junio 2013, 14:25 pm
Vamos, que si es un programa simple y es un solo archivo puedes borrarlo, pero si es un proyecto grande es mejor guardarlos para ahorrar tiempo a la hora de volver a compilarlo.


Título: Re: Para que sirve el archivo con extensión .o que se crea con codeblocks.
Publicado por: OmarHack en 21 Junio 2013, 15:11 pm
Muy buena explicación, ya me quedó claro de todo! Gracias a los todos. :)