• Sábado 14 de Diciembre de 2024, 17:34

Autor Tema:  Fallo De Linkado Que No Comprendo  (Leído 1243 veces)

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Fallo De Linkado Que No Comprendo
« en: Lunes 21 de Agosto de 2006, 15:02 »
0
Buenas:

tengo un main en el que tengo

Código: Text
  1.  
  2. #include <init.h>
  3. void main (void)
  4. {
  5.   Init();
  6. }
  7.  
  8.  

y init.h es:

Código: Text
  1.  
  2. void Init();
  3. void InitAlarm();
  4. void AlarmFunc(void *);
  5.  
  6.  

e init.c es:

Código: Text
  1.  
  2. #include <init.h>
  3. #include <windows.h>
  4. #include <appConfig.h>
  5. #include <global.h>
  6. #include <definitions.h>
  7. #include <resource.h>
  8. #include <wndproc.h>
  9. #include <process.h>
  10.  
  11.  
  12.  
  13. void Init(void)
  14. {
  15.   AppConfig();
  16.   hfuente = CreateFont(...);  //fuente
  17.  
  18.   //----------------------- Common Controls
  19.   InitCommonControls();
  20.  
  21.   //---------------------------------- Abrimos el archivo de entrada de datos
  22.   if (app.DataIncome==DATA_INCOME_FILE)
  23.     InitFileIncome();
  24.  
  25.   InitAlarm();
  26. }
  27.  
  28.  
bien:

el problema es que me da al compilar:

main.obj : error LNK2001: unresolved external symbol "void __cdecl Init(void)" (?Init@@YAXXZ)
Debug/MARCH.exe : fatal error LNK1120: 1 unresolved externals

y no entiendo a que se debe, en el main llamo a <init.h> en init.h prototipizo la funcion Init() y en el init.c la defino.

Alguien puede explicarme a que puede deberse?   :blink:  gracias por anticipado.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Fallo De Linkado Que No Comprendo
« Respuesta #1 en: Lunes 21 de Agosto de 2006, 15:29 »
0
Mmm me juego a que tenes Main.cpp e Init.c; Si tu proyecto es de C++ cambiar todos los modulos a .cpp y si es de C cambialos todos a .c, otra manera de solucionarlo es declarando las funciones como extern "C", el problema esta muy claro en la linea del enlazador, esta buscando esto (simbolos de tipo C++):
"void __cdecl Init(void)" (?Init@@YAXXZ)

y en realidad solo puede encontrar (simbolos de tipo C):
 _Init

Cambiando solo el codigo:
Código: Text
  1.  
  2. #ifdef __cplusplus
  3. extern &#34;C&#34; {
  4. #endif  
  5.   void Init();
  6.   void InitAlarm();
  7.   void AlarmFunc(void *);
  8. #ifdef __cplusplus
  9. };
  10. #endif  
  11.  
  12.  

PD. No deberias utilizar <> sino "" para incluir archivos que deberian estar en el mismo directorio de compilacion y no en directorios por defecto ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Fallo De Linkado Que No Comprendo
« Respuesta #2 en: Martes 22 de Agosto de 2006, 09:30 »
0
Es cierto, mi main es cpp y init es c. Tienes razon , muchas gracias por la ayuda.