Visible to Intel only — GUID: GUID-890E0199-70F5-4027-A12E-A907B4F76409
Visible to Intel only — GUID: GUID-890E0199-70F5-4027-A12E-A907B4F76409
Compile and Link Intel® Fortran and C Programs
Your application can contain both C and Fortran source files. If your main program is a Fortran source file (myprog.for) that calls a routine written in C (cfunc.c), you can use the following sequence of commands to build your application.
Linux and macOS
icx -c cfunc.c ifort -o myprog myprog.for cfunc.o
Windows
icx /c cfunc.c ifort myprog.for cfunc.obj /link /out:myprog.exe
The icpx command for Intel® C++ or the cl command (for Microsoft Visual C++) compiles cfunc.c. The -c or /c option specifies that the linker is not called. This command creates cfunc.o (Linux and macOS) or cfunc.obj (Windows).
The ifort command compiles myprog.for and links cfunc.o (Linux and macOS) or cfunc.obj (Windows) with the object file created from myprog.for to create the executable.
Additionally, on Linux and macOS systems, you may need to specify one or more of the following options:
Use the -cxxlib compiler option to tell the compiler to link using the C++ runtime libraries. By default, C++ libraries are not linked with Fortran applications.
Use the -fexceptions compiler option to enable C++ exception handling table generation so C++ programs can handle C++ exceptions when there are calls to Fortran routines on the call stack. This option causes additional information to be added to the object file that is required during C++ exception handling. By default, mixed Fortran/C++ applications abort in the Fortran code if a C++ exception is thrown.
Use the -nofor_main compiler option if your C/C++ program contains the main() entry point and is calling an Intel® Fortran subprogram, as shown in the following:
- For C use:
icx -c cmain.c ifort -nofor_main cmain.o fsub.f90
- For C++ use:
icpx -c cmain.c ifort -nofor_main cmain.o fsub.f90
- For C use:
For more information about compiling and linking Intel® Fortran and C++ programs on Windows operating systems, and the libraries used, see Specifying Consistent Library Types.