Intel® Fortran Compiler 17.0 Developer Guide and Reference

Building Intel® Fortran/C Mixed-Language Programs (Windows*)

When you understand and reconcile the calling, naming and argument passing conventions between Fortran and C, you are ready to build an application.

If you are using Microsoft Visual C++* or Intel® C++, you can edit, compile and debug your code within the Microsoft integrated development environment. If you are using another C compiler, you can edit your code within the integrated development environment. However, you must compile your code outside the integrated development environment and either build the Fortran/C program on the command line or add the compiled C .OBJ file to your Fortran project in the Microsoft IDE.

As an example of building from the command line, if you have a main C program CMAIN.C that calls Fortran subroutines contained in FORSUBS.F90, you can create the CMAIN application with the following commands:

icl /c cmain.c
ifort cmain.obj forsubs.f90

Intel® Visual Fortran accepts an object file for the main program written in C and compiled by the C compiler. The compiler compiles the .F90 file and then has the linker create an executable file under the name CMAIN.EXE using the two object files.

Either compiler (C or Fortran) can do the linking, regardless of which language the main program is written in; however, if you use the Fortran compiler first, you must include LIBIFCORE.LIB and IFCONSOL.LIB with the C compiler, and you may experience some difficulty with the version of the runtime library used by the C compiler. For these reasons, you may prefer to use the C compiler first or specify your project settings for both Fortran and C so there is agreement on the C library to link against, making sure that your application links against only one copy of the C library.

If you are using the IDE to build your application, Fortran uses Fortran and C libraries depending on the information specified in the Fortran folder in Project > Properties (Project Settings dialog box). You can also specify linker settings with the Linker folder in the Project Settings dialog box.

In the Fortran folder, within the Libraries property page, the RunTime Library category determines the libraries selected.

Runtime Library

Fortran Link Library Used

C Link Library Used

Debug Single-Threaded

libifcore.lib

libcmtd.lib

Multithreaded

libifcoremt.lib

libcmt.lib

Debug Multithreaded

libifcoremt.lib

libcmtd.lib

Debug Single-Threaded DLL

libifcorertd.lib (libifcorertd.dll)

msvcrt.lib (msvcrt.dll)

Multithreaded DLL

libifcoremd.lib (libifcoremd.dll)

msvcrt.lib (msvcrt.dll)

Debug Multithreaded DLL

libifcoremdd.lib (libifcoremdd.dll)

msvcrt.lib (msvcrt.dll)

For example, select Debug Multi-threaded DLL in the Run-time Library list to specify that DLL (/libs:DLL), multi-threaded (/threads), and debug (/dbglibs) libraries should be linked against, namely Fortran import library libifcoremdd.lib and its DLL library libifcoremdd.dll and C/C++ import library msvcrtd.lib and its DLL library msvcrtd.dll.

A mixed language solution containing a Fortran library project should have Disable Default Library Search Rules set to No in the IDE. To check this setting, choose Project > Properties and then choose the Libraries category. If you change the Disable Default Library Search Rules setting to Yes, you will need to explicitly add the needed runtime libraries to the non-Fortran project. If you are adding libraries explicitly, make sure you add IFCONSOL.LIB to the libraries of the non-Fortran project. This library is needed to perform almost any kind of I/O with Intel® Visual Fortran.

When you have a C++ main program and a Fortran library subproject, you need to manually add the library path to the Intel® Visual Fortran LIB folder. You only need to do this once per user. To add the path, choose Tools > Options > Projects and Solutions > VC++ Directories. Use the Show directories for: dropdown item to select Library files. Add the path to the displayed list.

The way Microsoft Visual C++* chooses libraries is also based upon the Project > Properties item, but within the C/C++ tab. In the Code Generation category, the Run-time library item lists the following C libraries:

Menu Item Selected

CL Option or Project Type Enabled

Default Library Specified in Object File

Multithreaded

/MTd

libcmt.lib

Multithreaded DLL

/MD

msvcrt.lib (msvcrnn.dll)

Debug Multithreaded

/MTd

libcmtd.lib

Debug Multithreaded DLL

/MDd

msvcrtd.lib (msvcrtd.dll)

You must take care to choose the same type of run-time libraries in both your Fortran and C project. For example, if you select Multithreaded DLL in your Fortran project, you must select Multithreaded DLL in your C project. Otherwise, when your build your mixed Fortran/C application, you will receive errors from the Linker regarding undefined and/or duplicate symbols.

If you are using Microsoft Visual C++* or Intel® C++ , the Microsoft integrated development environment can build mixed Fortran/C applications transparently, with no special directives or steps on your part. You can edit and browse your C and Fortran programs with appropriate syntax coloring for the language. You need to place your Fortran source files into a Fortran project and your C/C++ files into a Visual C++* project.

When you debug a mixed Visual C++/Fortran application, the debugger will adjust to the code type as it steps through: the C or Fortran expression evaluator will be selected automatically based on the code being debugged, and the stack window will show Fortran data types for Fortran procedures and C data types for C procedures.