Problema con opción -g de GCC

5 envíos / 0 nuevos
Último envío
#1 Dom, 16/10/2016 - 15:01
Percontator
Imagen de Percontator
Desconectado/a
colaborador
se unió: 20/03/16

Problema con opción -g de GCC

Estado: 
[SOLUCIONADO]

 Hola amigos.
 
 
 Yo sigo a vueltas con mi problema del turbo C,  . http://exdebian.org/foro/que-turbo-c-acepte-el-far  . No creais que no
 pero aún no he encontrado nada que me elimine los errores con el far. (Aparte de los otros tropecientos mil errores y cosas raras que hace,
 pero esos es otra historia, en la que no entraré ahora ).
 
 Y a proposito de ese hilo, la sujerencia de usar el djgpp me hizo pensar en una idea que tenía pensada para probar "un dia de estos".
 Trabajar con el ms-dos es muy interesante y además divertido, pero mas de una vez había pensado que tendría que tener
 algún entorno parecido para trabajar bajo un s.o. mas moderno y contemporaneo.
 Asi que al final instalé DDD (Data Display Debugger). Todo muy bien, aunque como su nombre indica es solo un debugger, no un compilador,
 por lo que no se puede empezar a escribir desde 0, hay que darle algo ya compilado, y además compilado para usar en un debugger.
 
 ¿Un compilador para linux?. Si ya lo tienes. ¿Que tal el GCC ?.
 Dicho y hecho, codigo va!, y problema se viene!.  [confused]
 

Después de algunas pruebas decido empezar con algo controlable, como por ejemplo un "hello world".
 

 /* source1.c */
 
#include <stdio.h>
#include <stdlib.h>

 int main ()
 {
 printf (" Hello Tux \n");
 
 return (0);  
 }

 

percontator@Amigo:~/Escritorio/GCC/test$ gcc -g source1.c test_linux
test_linux: In function `__x86.get_pc_thunk.bx':
(.text+0x30): multiple definition of `__x86.get_pc_thunk.bx'
/usr/lib/gcc/i586-linux-gnu/4.9/../../../i386-linux-gnu/crti.o:/build/glibc-Tw0rNg/glibc-2.19/csu/../sysdeps/i386/crti.S:66: first defined here
test_linux: In function `_fini':
(.fini+0x0): multiple definition of `_fini'
/usr/lib/gcc/i586-linux-gnu/4.9/../../../i386-linux-gnu/crti.o:/build/glibc-Tw0rNg/glibc-2.19/csu/../sysdeps/i386/crti.S:63: first defined here
test_linux: In function `data_start':
(.data+0x0): multiple definition of `__data_start'
/usr/lib/gcc/i586-linux-gnu/4.9/../../../i386-linux-gnu/crt1.o:(.data+0x0): first defined here
test_linux: In function `data_start':
(.data+0x4): multiple definition of `__dso_handle'
/usr/lib/gcc/i586-linux-gnu/4.9/crtbegin.o:(.data+0x0): first defined here
test_linux:(.rodata+0x4): multiple definition of `_IO_stdin_used'
/usr/lib/gcc/i586-linux-gnu/4.9/../../../i386-linux-gnu/crt1.o:(.rodata.cst4+0x0): first defined here
test_linux: In function `_start':
(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/i586-linux-gnu/4.9/../../../i386-linux-gnu/crt1.o:(.text+0x0): first defined here
test_linux:(.rodata+0x0): multiple definition of `_fp_hw'
/usr/lib/gcc/i586-linux-gnu/4.9/../../../i386-linux-gnu/crt1.o:(.rodata+0x0): first defined here
test_linux: In function `main':
(.text+0xfb): multiple definition of `main'
/tmp/ccn8Z29q.o:/home/percontator/Escritorio/GCC/test/source1.c:6: first defined here
test_linux: In function `_init':
(.init+0x0): multiple definition of `_init'
/usr/lib/gcc/i586-linux-gnu/4.9/../../../i386-linux-gnu/crti.o:/build/glibc-Tw0rNg/glibc-2.19/csu/../sysdeps/i386/crti.S:63: first defined here
/usr/lib/gcc/i586-linux-gnu/4.9/crtend.o:(.tm_clone_table+0x0): multiple definition of `__TMC_END__'
test_linux:(.data+0x8): first defined here
/usr/bin/ld: error in test_linux(.eh_frame); no .eh_frame_hdr table will be created.
collect2: error: ld returned 1 exit status

 
 PATAPUM!, montón gordo de problemas, y no llego a entiender que porras me está diciendo.

 
 Si hago  gcc -o source1.c  test_linux
 me sale bien, funciona y todo eso, y no salen errores ni aún con la opción -Wall ni con -W. Todo perfecto.
 Lo he compilado por pasos, y me dan todos bien incluido el gcc -c,
 luego el error tiene que estar en el enlazado. (??)
 
 Y mira por donde, probando opciones, guiones y cosas, omito el nombre del fichero destino, y me compila bien. (!!!)
 El problema parece ser que no admite que le des un nombre para el fichero de salida.
 

percontator@Amigo:~/Escritorio/GCC/test$ gcc -g source1.c           
percontator@Amigo:~/Escritorio/GCC/test$

percontator@Amigo:~/Escritorio/GCC/test$ ./a.out     
 Hello Tux
percontator@Amigo:~/Escritorio/GCC/test$

¿Es algún detalle que no se menciona en los manuales?,  ¿tengo algo mal en mi gcc, o que ocurre?.  Pienso que sería lógico que pudieras
 darle un nombre diferenciado a tu proyecto de programa, aunque aún haya de pasar por el debugger.

 
 Nota:  Estoy en un core duo, bajo debian Jessie, (8.0), y el compilador es el gcc que trae de origen. (si no me engañan los letreros
 que salen 4.9.2-10 ).
 El escritorio no lo pongo porque lo manejo desde el tty1.
 

 Gracias.

Dom, 16/10/2016 - 23:06
Panko
Imagen de Panko
Desconectado/a
moderador
se unió: 18/02/16
gcc -g source1.c -o test_linux

El primer resultado buscando tanto en google como en duckduckgo me dice eso...

  No hay bar que por bien no venga....
Mar, 18/10/2016 - 15:21
Percontator
Imagen de Percontator
Desconectado/a
colaborador
se unió: 20/03/16

 

 Ah vale,los guiones no van "en grupo" ni "sobreentedidos" ni otras cosas si no en lugares diferentes de la linea.

 Yo confié solamente en los man, con apoyo de páginas sobre el tema sacadas precisamente de internet, parece que no acerté la correcta.

 

En cuanto pueda lo pruebo y digo algo.

 

 Gracias.

 

 

Jue, 20/10/2016 - 14:04
Percontator
Imagen de Percontator
Desconectado/a
colaborador
se unió: 20/03/16

 Pues si, ahora ya va como queria.  Que burrada.
 Y ahora que lo se, y hasta me parece lógico, estoy dandole vueltas a porqué no se me ocurrió a mi,
 o como es que después de tanto leer cometo este fallo.
 En mi descargo, creo que pudo ser que la mayoria de textos que lei o descargué son sobre como
 usar el gcc, eso quiere decir que empiezan por el principio, (opción -o), y vas leyendo sobre
 las tropecientas maneras de usarlo, en varios casos con sus ejemplos. Pero en la compilación
 para debugger, suelen explicar simplemente que hay que usar la opción -g. Sin ejemplos.
 Y después de 2 ó 3 horas de andar a vueltas con el tema y sus correspondientes pruebas, si en
 algún texto salio algún ejemplo, tal vez ya no estaria fino para coger el detalle.

 Tal vez fuera eso.

 En cualquier caso gracias por la ayuda. A ver si este fin de semana sigo adelante mis pruebas.

Jue, 20/10/2016 - 18:53
Panko
Imagen de Panko
Desconectado/a
moderador
se unió: 18/02/16

Hombre, son cosas que le pueden ocurrir a cualquiera. Lo más simple es lo primero que no vemos. También, muchas veces --help o man, no muestran la información muy claramente y esas cosas se pueden saltar.

Piensa que, también, la opción -g añade lo necesario para el debug, con lo que es útil que no use el mismo nombre que un ejecutable que resultaría con una compilación "normal". Siempre es útil tener ejecutable y ejecutable-debug, claro que es una suposición mía (hace muchisimos años que no programo nada, estoy desentrenado xD).

  No hay bar que por bien no venga....