Build an Intel® MKL program on Mac OS* with Intel® Fortran Compiler,
For example, compilers_and_libraries_2017.0.065,
> ifort main. f -o main -L$(MKLPATH) -I$(MKLINCLUDE) -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lpthread
get compiler warning:
ld64 warning: indirect library libiomp5.dylib could not be loaded: file not found: libiomp5.dylib
Or runtime error:
dyld: Library not loaded: libiomp5.dylib
Referenced from: @rpath/libmkl_intel_thread.dylib
Reason: image not found
Root Cause :
Since MKL 11.2, the MKL libraries for Mac OS* have been integrated into Intel® C++/Fortran Compiler Professional Edition or Intel® C++/Fortran Composer XE for Mac OS* X. The default path of MKL libraries were changed from
for MKL version 11.0-11.1, please refer to "/opt/intel/Compiler/11.x/0xx/Frameworks/mkl/"
for MKL version 10.*, please refer to "/Library/Frameworks/Intel_MKL.framework/Versions/10.0.x.xxx/"
At the same time, the default OpenMP libraries (libiomp5.dylib, libiomp5.a) used by MKL are not in <MKL Libraries>/lib directory as in previous versions. They are under the Intel compiler lib directory now.
for instance, /opt/intel/compilers_and_libraries_2017.0.065/mac/compiler/lib
If you use openMP in c++ application and build with Intel C++ compiler, please firstly make sure you have enable the option "ICC Intel® C++ 17.*.***-Language" » "Process OpenMp Directives".
IPP is the same, please see the article XCode link error: "file not found: libiomp5.dylib"
For compiler warning:
Please refer to the MKL link line advisor.
the command line could be
>ifort main. f -o main -L$(MKLPATH) -I$(MKLINCLUDE) -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -openmp -lpthread
ifort main. f -o main -L$(MKLPATH) -I$(MKLINCLUDE) -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -L/opt/intel/compilers_and_libraries_2017.0.065/mac/compiler/lib -liomp5 -lpthread
Get runtime error:
like dyld: Library not loaded: @rpath/lib[mkl|ipp]_x.dylib
You did not set environment variables of MKL/IPP path or did not link your application to MKL/IPP path.
Please add the path of lib<product>.dylib in system environment before run binary (The <product> could be "mkl" or "ipp"). There are two methods to realize the solution:
- Run shell script file to set environment variables, for example, setting MKL:
> /opt/intel/compilers_and_libraries_2017.*.***/mac/mkl/bin/mklvars.sh <ia32|intel64>
- Or write command to set directly, for example, setting MKL:
> export DYLD_LIBRARY_PATH="/opt/intel/compilers_and_libraries_2017.*.***/mac/mkl/lib:$DYLD_LIBRARY_PATH
In Xcode 7.3.1 Development Environment:
Click solution/application, select "All" and "Combined", then find "Linking", add "Runpath search path" like following:
If after set the MKL library and Compiler library, you still got the error dyld: Library not loaded: @rpath/libimp5.dylib,
please consider the solutions provided in https://software.intel.com/en-us/forums/intel-c-compiler/topic/698021
install_name_tool -change @rpath/libiomp5.dylib /opt/intel/compilers_and_libraries_2017.4.xxx/mac/compiler/lib/libiomp5.dylib yourapplication
adding -Wl,-rpath,@executable_path options to your build command line.
Before this solution, you must make sure you have already use Intel C++/Fortran compiler and set "Header Search Path" and "Library Search Path" and "Other Link Flags".
Learn more information about linking and compiling Intel MKL in Mac OS*, please see:
Compiling and linking MKL with Xcode*
How to link application against Intel MKL using XCode IDE