Salut j'ai un petit soucis de link dans une appli...
C'est une appli en C/C++ avec des appels à du fortran. Et dans le fortran il y a aussi des appels à du C++, et c'est là qu'arrive mon problème...

j'ai trouvé un sujet qui semblait correspondre à mon problèmes mais ça ne marche toujours pas

voici mon erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
ferfa.obj : error LNK2001: unresolved external symbol _ferfa_c_
Je compile sous Visual C++ 6,
voici mes options de compil (.dsp)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "clc___Win32_Debug"
# PROP BASE Intermediate_Dir "clc___Win32_Debug"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "../lib/Debug"
# PROP Intermediate_Dir "clc___Win32_Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE F90 /browser /compile_only /dll /nologo /warn:nofileopt
# ADD F90 /browser /check:bounds /compile_only /convert:ibm /debug:full /iface:cref /include:"clc___Win32_Debug/" /dll /libs:dll /nologo /reentrancy:threaded /threads /warn:argument_checking /warn:nofileopt
# SUBTRACT F90 /noaltparam
# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "../include" /I "$(CASROOT)/inc" /D "WNT" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CLC_EXPORTS" /FR /YX /FD /c
# ADD CPP /nologo /MD /w /W0 /Gm- /GX /ZI /Od /I "../include" /I "$(CASROOT)/inc" /I "../include/libxml" /D "WNT" /D "WIN32" /D "DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CLC_EXPORTS" /FR /YX /FD /c
# SUBTRACT CPP /WX
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x419 /d "NDEBUG"
# ADD RSC /l 0x419 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 TKIGES.lib TKXSBase.lib TKShHealing.lib TKernel.lib TKMath.lib TKG2d.lib TKG3d.lib TKGeomBase.lib TKBRep.lib TKGeomAlgo.lib TKTopAlgo.lib TKBool.lib TKFillet.lib TKOffset.lib TKFeat.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"../lib/sumokernel_clc.dll" /libpath:"$(CASLIB)"
# SUBTRACT BASE LINK32 /pdb:none
# ADD LINK32 TKIGES.lib TKXSBase.lib TKShHealing.lib TKernel.lib TKMath.lib TKG2d.lib TKG3d.lib TKGeomBase.lib TKBRep.lib TKGeomAlgo.lib TKTopAlgo.lib TKBool.lib TKFillet.lib TKOffset.lib TKFeat.lib libxml2.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"../lib/Debug/kernel_clc.dll" /pdbtype:sept /libpath:"$(CASLIB)" /libpath:"../include/libxml"
# SUBTRACT LINK32 /pdb:none
fichier export1.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
#ifndef Standard_EXTERNC_ 
# define Standard_EXTERNC_ extern "C"
#endif
fichier fortran.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
#define ferfa_ FERFA
Standard_EXTERNC_ void ferfa_(void);
Voici l'appel de la fonction en fortran
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
BaseAu.cxx
#include <fortran.h>
...
int fermerBaseAu(void)
{ 
  ...
  ferfa_();
  //FERFA();
  ...
}
Voici ma fonction fortan qui appelle du C
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
ferfa.f
      SUBROUTINE FERFA
	INCLUDE "wininter.inc"
      INTEGER CODE
      CODE=0
 
      CALL FERFA_C(CODE)
 
      RETURN
      END
et le fichier wininter.inc inclus
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
...
C---------------------------------------------------
C Interface FORTRAN / C pour la fonction FERFA_C 
C---------------------------------------------------
      INTERFACE
      FUNCTION FERFA_C(CODE)
!DEC$ ATTRIBUTES C , ALIAS:'_ferfa_c_' :: FERFA_C
      INTEGER CODE
!DEC$ ATTRIBUTES REFERENCE ::CODE
      END FUNCTION FERFA_C
      END INTERFACE
...
... et la fonction C++ appelée
fichier Au.cxx
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
void ferfa_c_(int * code)
{
    printf("--> ferfa_c_");
    ...
}
ce qui me donne cette sublime erreur de link

Quelqu'un aurait-il une solution svp?