Skip to content

scivision/fortran-cpp-interface

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

83 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Interoperability examples between C, C++ and Fortran

ci intel-oneapi

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

We assume the compilers are C++11 and Fortran 2018 capable. We CI test with compilers including:

  • GCC ≥ 7
  • Clang ≥ 6
  • Intel oneAPI

This repo's examples also work with Cray compilers.

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

MacOS

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

Error handling in Fortran with C/C++ main program

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.

References

About

Examples of Fortran 2003 C / C++ interfacing with Fortran

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Sponsor this project

  •