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

problemas con dev C++

Estas en el tema de problemas con dev C++ en el foro de Programación General en Foros del Web. Hola amigos. estoy teniendo problemas con las referencias a funciones desde el main.c Tengo un proyecto con 3 archivos en el main.c hago #include "funciones.h" ...
  #1 (permalink)  
Antiguo 05/06/2005, 16:46
 
Fecha de Ingreso: noviembre-2003
Ubicación: mar del plata
Mensajes: 107
Antigüedad: 21 años
Puntos: 0
problemas con dev C++

Hola amigos.

estoy teniendo problemas con las referencias a funciones desde el main.c

Tengo un proyecto con 3 archivos

en el main.c

hago

#include "funciones.h"

int cant = suma(1,2);

en el header funciones.h

tengo el prototipo de la funcion suma

int suma(int a,int b);

y en el funciones.cpp

tengo :

#include "funciones.h"

int suma(int a,int b){
return a+b+10;
}


EL PROBLEMA ES EL SIGUIENTE

cuando lo compilo en su totalidad no se si anda mal el linker o que ...que me tira error

[Linker error] undefined reference to `suma'
ld returned 1 exit status
D:\trabajoc\prueba\Makefile.win [Build Error] [prueba.exe] Error 1

Que estoy haciendo mal amigos ?
__________________
Ale
  #2 (permalink)  
Antiguo 05/06/2005, 16:57
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
Puntos: 17
En teoría está bien... Revisa si DevCpp está compilando todos los archivos (miralo en el log) y si no es así, comprueba que todos tengan la opción de "compilable"... Aparte de eso, si no has tocado nada en la instalación o configuración de DevCpp a lo loco y el proyecto es uno de consola normal, debería funcionar.

Otra posibilidad es que crees un proyecto y mires a ver si compila sin tocar nada los dos archivos, después en main.c añades el header y lo usas y miras a ver si funciona.
  #3 (permalink)  
Antiguo 05/06/2005, 17:07
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años
Puntos: 52
no creo.
Ayadele un extern a el prototipo que esta en funciones.h. Eso debe resolver el problema.
  #4 (permalink)  
Antiguo 05/06/2005, 17:13
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años
Puntos: 52
no creo.
Ayadele un extern a el prototipo que esta en funciones.h. Eso debe resolver el problema.
Saludos
  #5 (permalink)  
Antiguo 05/06/2005, 17:14
 
Fecha de Ingreso: noviembre-2003
Ubicación: mar del plata
Mensajes: 107
Antigüedad: 21 años
Puntos: 0
no puedo solucionarlo ... no se que hacer =(

EL LOG ME DICE ESTO :


Compilador: Default compiler
Building Makefile: "D:\trabajoc\nuevo\Makefile.win"
Ejecutando make clean
rm -f ppal.o funciones.o proyect.exe

gcc.exe -c ppal.c -o ppal.o -I"D:/trabajoc/prueba" -I"C:/Dev-Cpp/include" -I"D:/trabajoc/nuevo"

gcc.exe -c funciones.cpp -o funciones.o -I"D:/trabajoc/prueba" -I"C:/Dev-Cpp/include" -I"D:/trabajoc/nuevo"

gcc.exe ppal.o funciones.o -o "proyect.exe" -L"D:/trabajoc/prueba" -L"C:/Dev-Cpp/lib"

ppal.o(.text+0x3a):ppal.c: undefined reference to `suma'
collect2: ld returned 1 exit status

make.exe: *** [proyect.exe] Error 1

Ejecución Terminada
__________________
Ale
  #6 (permalink)  
Antiguo 05/06/2005, 17:18
 
Fecha de Ingreso: noviembre-2003
Ubicación: mar del plata
Mensajes: 107
Antigüedad: 21 años
Puntos: 0
Cita:
Iniciado por Instru
no creo.
Ayadele un extern a el prototipo que esta en funciones.h. Eso debe resolver el problema.
lo intente pero sigue sin funcionar =( . se les ocurre algo mas ?

tambien intente incluir el directorio desde herramientas / opciones dle compilador / ... programa/ pero tampoco funciona....
__________________
Ale
  #7 (permalink)  
Antiguo 05/06/2005, 23:37
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
Puntos: 17
Cita:
Iniciado por Instru
no creo.
Ayadele un extern a el prototipo que esta en funciones.h. Eso debe resolver el problema.
Saludos
No, no tiene por qué. Eso es para otras cosas.
  #8 (permalink)  
Antiguo 06/06/2005, 00:23
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Me imagino que el problema es tener un main.C y otros archivos .CPP.

Usando VC++ funciones.obj me produce este simbolo:
?suma@@YAHHH@Z

Mientras que el ppal.C intenta buscar este otro:
_suma

¿Como solucionarlo? En parte Instru estaba en lo cierto pero me parece que no con gran fundamento, lo que hay que hacer es obligar a C++ a comportarse como C ya que lo contrario no es posible (a menos que quieras cambiar el ppal.c por un ppal.cpp).

En funciones.h: extern "C" int suma(int x, int y);
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 06/06/2005, 06:00
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
Puntos: 17
Cita:
Iniciado por Eternal Idol
Me imagino que el problema es tener un main.C y otros archivos .CPP.

Usando VC++ funciones.obj me produce este simbolo:
?suma@@YAHHH@Z

Mientras que el ppal.C intenta buscar este otro:
_suma

¿Como solucionarlo? En parte Instru estaba en lo cierto pero me parece que no con gran fundamento, lo que hay que hacer es obligar a C++ a comportarse como C ya que lo contrario no es posible (a menos que quieras cambiar el ppal.c por un ppal.cpp).

En funciones.h: extern "C" int suma(int x, int y);
En teoría si está compilando como C++ el archivo (le dije que revisase que si así es) compila con notación C++ (símbolos con datos sobre los tipos), en vez de C (guion o cualquier otra cosa).

Lo más fácil creo que es decirle que el archivo se compila como C++.
  #10 (permalink)  
Antiguo 06/06/2005, 06:33
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Cita:
Iniciado por MaxExtreme
En teoría si está compilando como C++ el archivo (le dije que revisase que si así es) compila con notación C++ (símbolos con datos sobre los tipos), en vez de C (guion o cualquier otra cosa).

Lo más fácil creo que es decirle que el archivo se compila como C++.
Le dijiste que revisara si estaba compilando todos los archivos y en efecto lo esta haciendo pero si gcc trabaja como VC++ el problema es exactamente el que comente. Lo mas facil es que cambie ppal.c por ppal.cpp.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #11 (permalink)  
Antiguo 06/06/2005, 08:51
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
Puntos: 17
Cita:
Iniciado por Eternal Idol
Le dijiste que revisara si estaba compilando todos los archivos y en efecto lo esta haciendo pero si gcc trabaja como VC++ el problema es exactamente el que comente. Lo mas facil es que cambie ppal.c por ppal.cpp.
Mmm como dijistes lo de obligar a C++ a compilar como C o viceversa, me refería a hacerlo en el IDE, pero vamos, si quiere cambiar la extensión... ;) Lo que pasa es que no estoy seguro de si por cambiarla va a cambiar su configuración, por eso decía ir directamente a las opciones del archivo.
  #12 (permalink)  
Antiguo 06/06/2005, 10:11
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años
Puntos: 52
Bueno, hasta donde yo se gcc identifica si es C o C++ por la extension del archivo.
Y pues si, con el extern "C" {....} podria funcionar.

Mejor que use #ifdef __cplusplus
extern "C" {
#endif

//Codigo C aqui

#ifdef __cplusplus
}
#endif

Con esto el codigo sera compatible con la extension que sea y con el compilador que sea.

Saludos
  #13 (permalink)  
Antiguo 06/06/2005, 12:21
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Con el extern "C" funciona perfectamente, siempre es mas facil probarlo (como hice yo antes de postear). La cuestion principal es si tiene sentido mezclar codigo de diferentes lenguajes en un solo proyecto (no en librerias).

La compilacion condicional tambien podria ser asi por ejemplo:

Código:
#ifdef __cplusplus 
  #define EXPORTAR extern "C"
#else
  #define EXPORTAR
#endif

EXPORTAR int suma(int x, int y);
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
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 14:17.