unresolved external symbol __intel_fast_memcpy


Problem : 
When link ipp static library, get the link error
ippsmerged_t.lib(pscopyca_split_px_ownsCopy_8u.obj) : error LNK2019: unresolved external symbol __intel_fast_memcpy referenced in function

for example, build the below C code in Microsoft* Visual Studio IDE

#pragma comment(lib, "ippsemerged.lib")
#pragma comment(lib, "ippsmerged_t.lib")
#pragma comment(lib, "libiomp5mt.lib")
#pragma comment(lib, "ippcore_t.lib")

#include <ipps.h>

int main()
{
ippsCopy_32f(0,0,0);
return 0;
}

Root Cause : 

The symbol intel_fast_memcpy is defined in Intel support library : libirc.lib and libircmt.lib. It optimizes memory copy function memcpy() for specific CPU types by the use of SSE vector instructions where appropriate.

The libraries are from Intel Compiler and also be included in IPP library.

libirc.lib
Intel support library for CPU dispatch, intel_fast_ memory, and traceback support routines

libircmt.lib
Same as libirc.lib, but with thread-safe support. This library is shipped for legacy purposes, as libirc.lib now contains thread-safe support.

See more in Intel Compiler on-line manual.


Resolution : 
Please link libirc.lib or libircmt.lib into your project

#pragma comment(lib, "ippsemerged.lib")
#pragma comment(lib, "ippsmerged_t.lib")
#pragma comment(lib, "libiomp5mt.lib")
#pragma comment(lib, "ippcore_t.lib")
#pragma comment(lib, "libirc.lib")

or in project propery page =>Configuration Properies =>Linker =>Input=>Additinal Dependency
add ippsemerged.lib ippsmerged_t.lib ippcore_t.lib ippiomp5mt.lib libirc.lib

Add IPP library path, e.g. C:\Program Files\Intel\IPP\6.1.1.035\ia32\lib
in Configuration Properies =>Linker =>General =>Additional Library Directories at the same time if need.

Einzelheiten zur Compiler-Optimierung finden Sie in unserem Optimierungshinweis.