Redistributable files for Mac OS X and Linux

Redistributable files for Mac OS X and Linux

Hi there,

I have been using Intel's Fortran compiler for Windows for a while. The binary produced by the compiler with options OpenMP and MPI needs to be redistributed with several dynamic link libraries, which are impi.dll, libguide40.dll, libiomp5md.dll, and the executable mpiexec.exe.

recently, I begin to compile the same source code using ifort in Mac OS X* (command line: ifort -ip *.f90) and Linux (command line: mpif90 -O2 -ip -ipo -inline-factor=100 -unroll-aggressive -openmp *.f90). What are the redistributables for each OS, and where can I find these redistributables?

Thanks a lot!

17 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

I’m not sure which specific compiler release you have. For our current Composer XE 2013 SP1 release visit

OS X*: Redistributable libraries for Intel® C++ and Fortran Composer XE 2013 SP1 for OS X*
Linux: Redistributable libraries for the Intel® C++ and Fortran Composer XE 2013 SP1 for Linux*

If you need something earlier then visit the articles above and use the link in the article to the previous CXE 2013 release. To go even further back, in the article for CXE 2013 click the link to the Composer XE (2011) release.

Hi Kevin,


Thank you so much for the quick and useful information. The composer for OS X is the most recent version, and the compiler for Linux is version 11.x. 

I know the redistributable package includes a lot of files, and some of them are not really necessary (right?). For Windows, I figured out that only 3 .dll  files are necessary (impi.dll, libguide40.dll, libiomp5md.dll), and only one .exe file is necessary (mpiexec.exe) for parallel run. Can you give me a similar list of necessary library and binary files for each OS, Mac OS X and Linux?

thanks a lot!

11.1 is pretty dated but for Linux 11.1 please visit Redistributable libraries for the Intel® C++ and Fortran Compiler Professional Editions for Linux*

The libraries needed are application dependent (sometimes influenced by chosen compiler options) so I don't want to speculate on which may or may not be needed. As you may already know, you can use ldd (Linux) and otool -L (OS X) on the executable to determine library dependencies. The information those tools provide should be helpful in deciding which libraries are necessary for your application.

Thank you so much for the helpful information, Kevin!

You're welcome. Happy I could help.

I have got some strange things happening, and hope somebody could help.

On Mac OS x, I can choose to use static linking and dynamic linking, using command lines

ifort code.f90 -ip -O1 -i-static 

ifort code.f90 -ip -O1 

respectively. I compared the binaries produced, and the first is larger than the 2nd as expected. However, when I run the binaries for exactly the same data, different results are obtained. Why?


On Windows, I can choose to use static linking and dynamic linking, using command lines

ifort code.f90 /ip /O1 /libs:static /MT

ifort code.f90 /ip /O1 

In both cases, no warning or error message appears. However, the executables have exactly the same size. Apparently, no static libraries were linked for the 1st command line. What happened? 

From earlier you said you were using the latest Composer XE 2013 SP1 release on OS X*. The -i-static option has been deprecated so you should use -static-intel instead; however, that is also the default. At least with the toy program that I used, I see no difference in executable sizes for the command lines you indicated using for OS X*. I do see an executable size difference with -shared-intel.

For Windows*, I see the ifort -help suggests that "/libs:static" is a support variant and the driver seems not to complain; however, I believe the option for static libraries is just /libs or the alternative /MT and thus you need only specify one. Static libs is also the default on Windows. There is no difference in the executable size or in the command-lines you indicated using for the small program I used. I do see an executable size difference with /libs:dll.

(I expect it was just a typo in your post, but /ip is not valid on Windows, that should be /Qip)

Thank you so much for the help, Kevin!

Now I met another problem and I hope you (and somebody else) could kindly help.

As I said before, I have been using intel's Fortran compiler (with MPI and Openmp) for Windows for some time. Now I have started using Linux.  I can compile my fortran code with command

mpif90 -O2 -ip -ipo -inline-factor=100 -unroll-aggressive -openmp *.f90

The binary generated can be run without problem on the machine used in the compilation. However, when I send the binary, a.out, to a colleague  to run on his Linux machine, he got an error:

./a.out: error while loading shared libraries: cannot open shared object file: No such file or directory

It seems the library is needed. How can I compile my code to include this (and any other?) library so that the binary can be run without the need for this library?

Thanks a lot!

That's not an Intel file - you're using MPICH. MPICH may or may not provide a static library for its code - check with its documentation.

Retired 12/31/2016

I'm glad the information helped and that you are making progress. A kind word of advice: You should avoid extending the same post by adding new issues/questions to it and instead start new posts with appropriate titles. Re-using an existing post under the original title can cause others with knowledge about your current question/issue to not read your latest post based on non-interest/knowledge about the original post's title.

Assuming your MPI package provides a static version of the libmpich90nc library and other associated MPI libraries, you can try compiling/linking with the option -static to instruct the link to use static versions of libraries. This instructs the linker to link all static libraries, including Intel compiler specific libraries. The link will fail where static versions of required libraries are not available in which case custom link options may be necessary to pursue minimizing use of non-static libraries.

As mentioned earlier, after the compilation/linking completes successfully, use the ldd utility on resulting executable to produce a list of dependent shared libraries. With -static, it should report "not a dynamic executable" indicating no dependency on dynamic libraries.

Hi Kevin,

I know it is not quite right just to add new issues to the old one. However, I cannot find the key to add a new issue.

Your information is really useful. I used ldd to find the dependency files, and find the file and path for I then provided this file to my colleague. He tried, and generated another error (where a_mpi.out is my binary):

a_mpi.out: error while loading shared libraries: invalid ELF header

When I compile my code with -static with command line

 mpif90 -O2 -ip -ipo -inline-factor=100 -unroll-aggressive -static *.f90 

I got an error

ld: cannot find -lmpichf90nc


You must return to the main Fortran Linux and Mac OS X Forum page and then click on the “New Topic” button. Sorry :-(

Also, it is not obvious, but the line near the very top of your current viewing window that reads: Home › Forums › Intel® Software Development Products › Intel® Fortran Compiler for Linux* and Mac OS X* contains individual clickable string components that jump to each of the various levels of the forum hierarchy. For example, to reach the main page for this particular Fortran Linux/OS X* forum, click on the words "Intel® Fortran Compiler for Linux* and Mac OS X*". To reach to the list of Software Development Product forums, click on the string component "Intel® Software Development Products".

The link error indicates there is no static version of the specific MPI library.

The run-time error indicates the library you copied is not compatible with your colleague’s system. I don’t know exactly what the issue may be. Is it possible you copied a 32-bit library and his OS is x86_64 or vice versa?  Are you both using identical Linux distros?  You can check the library using the file command, e.g. file

Probably best to consult the MPI provider for either the necessary static libraries for you to link with on your system or a redistributable package that your colleague could install or their documentation about what libraries must be copied for distribution of an app built using their MPI implementation.

I hope that helps!

Thanks Kevin, I now understand how to start a new topic.

as to the the problem of, I am now sure what is wrong. However, When I compile the code without using MPI, the serial binary worked fine on my colleague's computer, indicating it is not the Linux distribution problem.

Yes, I saw your new topic. Thank you.

Perhaps similar to your OS X* redistributable issue, is it possible the MPI library was corrupted transferring it to your colleague's system?  Use the file command on the file on both systems to compare them. Check their file sizes too (if you had not already).

Thanks for the reminder. Now we have checked, and the files have the same checksum. It is bizzare that the serial version (without MPI) works fine, but the parallel one does not work. It asked for file When the file is provided, it complains 'a_mpi.out: error while loading shared libraries: invalid ELF header'

are you on the same version of OS X?

Leave a Comment

Please sign in to add a comment. Not a member? Join today