dyld:Library not loaded:libiomp5.dylib

By Ying Hu,

Published:11/02/2010   Last Updated:07/22/2016

 

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

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

or

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

 

Product and Performance Information

1

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804