5
votes

I'm trying to link in some legacy Fortran code with a Visual Studio C++ project. I tried using the Windows build of gfortran to build my static library but Visual Studio complains about unresolved external symbols. I guessing this is because mixing mingw and visual studio compilers is a horrible, horrible idea.

I've googled a bit and I see my options are Intel's and Lahey's compilers but both carry a hefty price tag.

Does anyone know of other options, or a different approach I can take?

EDIT IN RESPONSE TO COMMENTS

The error I'm getting is:

Error 7 error LNK2019: unresolved external symbol ___chkstk referenced in function fmm

Searching around led me to this, which just seems like a bad idea.

1
Visual C++ can link to other compiler's DLLs, so what exactly are the errors you are getting? Are they functions from runtime libs or _your_fortran_function or mangled names? - Pete Kirkham
I second the suggestion to show us the errors. Fortran compilers typically name-mangle routine names with underscores to avoid conflict with C routines. You may need to override this to combine Fortran and C/C++. A recent related question: stackoverflow.com/questions/1985819/gfortran-dll-underscore - M. S. B.
@Pete and @M.S.B, see edits above, thanks for looking. - Mark

1 Answers

2
votes

You could go the old-school route and use f2c to translate your legacy Fortran to standard K&R C which you should be able to build with the MSFT toolchain.

I have not used f2c in many moons and recall it being a tad picky and a pain to work with. As g77 and later gfortan became so much better, there was less and less need to use it.

That said, for your legacy needs it sounds like a good fit. The Wikipedia entry on f2c also contains a link to the f2c sources at Netlib.

Edit: This may not free you from the run-time requirements though -- your C++ app may need to be linked to the f2c runtime.