Fortran subroutines and functions are easily called from C and C++.
Use the standard C binding to define variable and bind functions/subroutines.
This project is also a way to quickly check if compilers you have are ABI-compatible. For example:
- Clang and Gfortran
- (Windows) MSVC and Intel oneAPI ifort
Demonstrate linking of
- C and C++ program calling Fortran libraries
- Fortran program calling C and C++ libraries
In general, strongly avoid the FortranCInterface of CMake and mangling function names--just use Fortran 2003 standard bind(C)
cmake -B build
cmake --build build
ctest --test-dir build
For MacOS with Apple's Clang and Homebrew GCC, be sure you have in ~/.zshrc like the following: (check directory / versions on your Mac)
export LIBRARY_PATH=$LIBRARY_PATH:/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib
export CPLUS_INCLUDE_PATH=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
export CXXFLAGS=-I$CPLUS_INCLUDE_PATH
export CFLAGS=$CXXFLAGS
Using Fortran statement "stop" or "error stop" with a C/C++ main program works like with a Fortran main program. The "error*" examples show this.