Foros del Web » Programación para mayores de 30 ;) » Programación General »

compilcion multiple gcc

Estas en el tema de compilcion multiple gcc en el foro de Programación General en Foros del Web. Hola a todos. Solo aclarenme una duda .... Tengo algunos .c y .h en un directorio. Todos dependen de todos( si, eso de usar muchas ...
  #1 (permalink)  
Antiguo 22/04/2005, 20:57
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
compilcion multiple gcc

Hola a todos.

Solo aclarenme una duda ....
Tengo algunos .c y .h en un directorio. Todos dependen de todos( si, eso de usar muchas variables globales...y externs).
Bueno, pues al intentar compilarlos, como que no me reconoce de donde vienen los externs, esto solo pasa con gcc. Con dev-c o con msvc todo compila bien.

Como le hago para que todo se compile junto

saludos
  #2 (permalink)  
Antiguo 23/04/2005, 01:47
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Tal vez con mas informacion al respecto, linea de comandos, respuesta del compilador, etc. te pueda ayudar.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 23/04/2005, 02:25
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por Instru
Hola a todos.

Solo aclarenme una duda ....
Tengo algunos .c y .h en un directorio. Todos dependen de todos( si, eso de usar muchas variables globales...y externs).
Bueno, pues al intentar compilarlos, como que no me reconoce de donde vienen los externs, esto solo pasa con gcc. Con dev-c o con msvc todo compila bien.

Como le hago para que todo se compile junto

saludos
Claro, eso pasa por no practicar a compilar con la línea de comandos :)

Los .h no se compilan por sí solos... Veamos, si tienes muchos muchos archivos es mejor que te hagas un makefile y así no tienes que repetir toda la secuencia.

Simplemente para compilar varios .cpp, compilas cada uno por separado y luego con el linker juntas todos los binarios. O éso, o haces que gcc compile todos y te los linke él (creo que dejaba hacerlo también con varios).

Pero sí, especifícanos un poco más que dice el compilador.
  #4 (permalink)  
Antiguo 23/04/2005, 08:37
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Mira. Si sabia manejar bien la linea de comandos, pero nunca me puse a compilar tantos archivos en una sola compilacion.....pero bueno.
El compilador me marca varios undefined reference de mis variables que usan extern.
yo le doy que me compile el main.c y pues todas la variables que son extern ahi me dice que no las encuentra porque la declaracion de estas variables estan en otro archivo .c.

Si, me imagine que tengo que crear el makefile, pero necesitro que me ayuden con eso.

Saludos
  #5 (permalink)  
Antiguo 23/04/2005, 09:00
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Me suena a que estas dandole a compilar sin especificarlo que no enlace. Proba con el modificador -c para que solo compile el main.c.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #6 (permalink)  
Antiguo 23/04/2005, 09:05
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
bueno, y cuando tengo todos los .o los objetos, de que manera enlazo todos?
Saludos
  #7 (permalink)  
Antiguo 23/04/2005, 09:16
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Puedes obtener el resultado directamente:

gcc main.c otro.c otromas.c

Eso te compila cada uno, te los linkea y te crea el ejecutable final... Si el código es correcto claro. Olvídate de compilar desde la línea de comandos si no estás completamente seguro de tu código (de si es o no corecto).
  #8 (permalink)  
Antiguo 23/04/2005, 09:17
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Pasandole a gcc los nombres de los archivos de codigo objeto, gcc archivo1.o archivo2.o archivo3.o -oPrograma
http://gcc.gnu.org/onlinedocs/gcc/Invoking-GCC.html

Creo que tambien podes usar ld directamente:
http://www.gnu.org/software/binutils...-2.9.1/ld.html
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 23/04/2005, 09:20
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Mi codigo es correcto. compil bajo windows y es totalmente portable.
Pero lo curiosos es que no me detecta los archivos de cabecera. deja hago algunos expertimentos con los links que me dio eternal....Eternal Idol
  #10 (permalink)  
Antiguo 23/04/2005, 12:15
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Ok. logre que "compilara". Ahora tengo un archivo a.out
Como le hgo para crear ya el ejecutable pero de linux?
Estoy bajo la plataforma linux. Y pues uso gcc file.c file2.c `sdl-config --cflags --libs`
Y solo me saca unos mensajes de advertencia pero ningun error.
Como creo el ejecutable?

Saludos
  #11 (permalink)  
Antiguo 23/04/2005, 12:18
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Jeje, ese es el ejecutable

Dale a ./a.out
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #12 (permalink)  
Antiguo 23/04/2005, 14:34
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Si, lo pude averiguar.
no se porque razon se me ocurrio poner el ./ y pues si, funciono.
De todas maneras gracias Eternal Idol y gracias MaxExtreme.....jejej

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:36.