Я работаю в среде Microsoft Visual C++ 2008 и понадобилось вызвать процедуру, написанную на фортране.
По ссылке "
http://www.neurophys.wisc.edu/comp/docs/no...t017.html#fcall" есть один пример:
The following sample shows how Fortran routines and functions can be called from a C++ program.
(1) The C++ file:
// This illustrates how a Fortran routine and function may be
// called from a main program in C++
#include <iostream.h>
extern "C"
{
void __stdcall FR1(int*,int *);
int __stdcall FF1(int *);
}
int main()
{
int n=10,nSq,nCube;
FR1(&n,&nSq);
cout << "The square is:" << nSq << endl;
nCube=FF1(&n);
cout << "The Cube is:" << nCube << endl;
return 0;
}
(2) The Fortran File:
SUBROUTINE FR1(N,M)
C COMPUTES THE SQUARE OF N, RETURNS IN M
M=N*N
RETURN
END
C
INTEGER FUNCTION FF1(N)
C COMPUTES THE CUBE OF N
FF1=N*N*N
RETURN
END
Я сделал следующее:
1: в файл forc.for , который находится в той же директории проекта, что и сам проект, поместил такой текст:
SUBROUTINE FR1(N,M)
C COMPUTES THE SQUARE OF N, RETURNS IN M
M=N*N
RETURN
END
C
INTEGER FUNCTION FF1(N)
C COMPUTES THE CUBE OF N
FF1=N*N*N
RETURN
END
2: в файл самого проекта поместил несколько видоизменённый вариант:
#include <stdio.h>
#include "stdafx.h"
extern "C"
{
void __stdcall FR1(int*,int *);
int __stdcall FF1(int *);
}
int _tmain(int argc, _TCHAR* argv[])
{
int n=10,nSq,nCube;
FR1(&n,&nSq);
printf("The square is:%d\n",nSq );
//cout << "The square is:" << nSq << endl;
nCube=FF1(&n);
printf("The Cube is:%d\n",nCube );
//cout << "The Cube is:" << nCube << endl;
return 0;
}
3: после неудачной компиляции на выходе получил :
1>Linking...
1>forTOc.obj : error LNK2019: unresolved external symbol _FF1@4 referenced in function _wmain
1>forTOc.obj : error LNK2019: unresolved external symbol _FR1@8 referenced in function _wmain
1>C:\Users\admin\Desktop\work\23052012\c_for\forTOc\Debug\forTOc.exe : fatal error LNK1120: 2 unresolved externals
1>Build log was saved at "file://c:\Users\admin\Desktop\work\23052012\c_for\forTOc\Debug\BuildLog.htm"
1>forTOc - 3 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Что здесь нужно исправить?