Unresolved external symbol ___intel_sse2_strlen

Problem : 
After I have upgraded the compiler from Intel C++ compiler 10.1 to 11.1.038, in the linking stage, we get the errors like this:

unresolved external symbol ___intel_sse2_strlen

Environment : 

Intel C++ compiler, Linux and Windows

Root Cause : 

Proper libirc.lib is not included during linking.

Resolution : 

The symbol is defined in libirc.lib.

On Linux you may try the following:

$nm /opt/intel/Compiler/11.1/038/lib/intel64/libirc.a | grep strlen
U strlen
U strlen
0000000000000000 T __intel_sse2_strlen
0000000000000030 T __intel_sse4_strlen

The Intel compiler driver will automatically include this. If you are not using icc or icpc then please include above library in linker command. You may try adding the compiler option -# to see the library being searched, and whether it is the older version.

On Windows you may try the following:
C:\Program Files\Intel\Compiler\11.1\038\lib\ia32\> dumpbin /symbols libirc.lib|find /I "strlen"

005 00000000 SECT1 notype () External | ___intel_sse2_strlen
008 00000000 SECT2 notype () External | ___intel_sse4_strlen
027 00000000 UNDEF notype () External | _strlen
007 00000000 UNDEF notype () External | _strlen
017 00000000 UNDEF notype () External | _strlen

In Visual Studio IDE, you may try the following to check where the "libirc.lib" is found and to make sure if it is the same version as the compiler version.

1. Select "Release" config
2. Open the project propety window, select "Link -> General"
2. Set "Show Progress" as "Displays Some Progress Messages (/VERBOSE:LIB)"
3. rebuild

Para obter informações mais completas sobre otimizações do compilador, consulte nosso aviso de otimização.