dyld:Library not loaded:libiomp5.dylib

 

Problem : 

Build an Intel® MKL program on Mac OS* with Intel® Fortran Compiler,

For example, compilers_and_libraries_2017.0.065,
MKLPATH=/opt/intel/compilers_and_libraries_2017.0.065/mac/mkl/lib
MKLINCLUDE=/opt/intel/compilers_and_libraries_2017.0.065/mac/mkl/include
> 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
Trace/BPT trap

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 
"/opt/intel/Compiler/11.x/0xx/Frameworks/mkl/" 
to "/opt/intel/compilers_and_libraries_201*.*.***/mac/mkl"

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"

Solution:

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 
or
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 

 


 

Problem:

Get runtime error: 
like dyld: Library not loaded: @rpath/lib[mkl|ipp]_x.dylib

Root Cause:
You did not set environment variables of MKL/IPP path or did not link your application to MKL/IPP path.

Solution:

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:
 /opt/intel/compilers_and_libraries_2017.*.***/mac/mkl/lib
 /opt/intel/compilers_and_libraries_2017.*.***/mac/compiler/lib

 

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

 

For more complete information about compiler optimizations, see our Optimization Notice.