# Linker error when building 2.4.7 with IPP 8.0

I'm trying to build new OpenCV 2.4.7 with IPP.
If I use old IPP 7.1update1 or uncheck WITH_IPP, it can be build correctly.
But if I upgradde to IPP 8.0 or 8.0update1, it will appear linker error like below:

../../lib/libopencv_core.so.2.4.7: undefined reference to _intel_fast_memcpy'
../../lib/libopencv_core.so.2.4.7: undefined reference to __svml_cos4'
../../lib/libopencv_core.so.2.4.7: undefined reference to __svml_sin2'
../../lib/libopencv_core.so.2.4.7: undefined reference to __intel_ssse3_rep_memcpy'
../../lib/libopencv_core.so.2.4.7: undefined reference to __svml_sincos2'
../../lib/libopencv_core.so.2.4.7: undefined reference to _intel_fast_memset'
../../lib/libopencv_core.so.2.4.7: undefined reference to __svml_sin4'
../../lib/libopencv_core.so.2.4.7: undefined reference to __libm_sse2_sincos'
../../lib/libopencv_core.so.2.4.7: undefined reference to __intel_ssse3_memcpy'


Suplement: After I use my correctly built opencv(2.4.7 with IPP 7.1) to build my code. It will appear linker error again, like below:

/usr/bin/ld: cannot find -llibippcore_l.a
/usr/bin/ld: cannot find -llibipps_l.a
/usr/bin/ld: cannot find -llibippi_l.a
/usr/bin/ld: cannot find -llibippcv_l.a
/usr/bin/ld: cannot find -llibippcc_l.a
/usr/bin/ld: cannot find -llibippvm_l.a
/usr/bin/ld: cannot find -ltbb


and these link is come from opencv.pc.
I don't know my link direcctory should be set to /opt/intel/ipp/lib/intel64 or not but I can comfirm the name -llibippcore_l.a is not correct, it should be -lippcore_l.a normally.
The opencv 2.6.1 don't use these linking and can work correctly.

edit retag close merge delete

Gianluigi, I have the same problem. Do you use IPP as Intel Composer XE component or standalone version?

( 2013-12-30 08:48:41 -0500 )edit

I am having the same issue. It appears as if it occurs because the intel compiler knows where some internal libraries are, but you are using traditional ld. Finding the right libraries (so far, irc, imf, and svml appear to be needed) and adding them to the compiler options seems to get further in the compilation process. I don't have it all the way working yet though. If I do, I will post my modified cmake file.

( 2014-01-27 16:07:10 -0500 )edit

Sort by » oldest newest most voted

Well, I have compilation working (have not actually run a program yet though.) That said, the inclusion of the lib-irc, imf, and svml libraries seemed to work. I also needed to change the CMake file from looking for the static versions to looking for the .so versions. I am pasting the diff between the original and my modified "OpenCVFindIPP.cmake" file below.

Besides the CMake file, the original IPP search seemed to find a different directory than what was actually needed. I'm not sure what exactly IPP is putting in each directory, but for me it installed both a "composer_xe_2013_sp1" and "composer_xe_2013_sp1.0.080" directory. The cmake found the first directory by default, but the required .so files are only in the .0.080 directory. So I changed the "IPP_H_PATH" using the CMAKE gui.

Hope this helps. I should mention that this is with 2.4.8, not 2.4.7. The problem is a change in IPP though, I believe.

35c35
< set(IPP_LIB_SUFFIX  ${CMAKE_STATIC_LIBRARY_SUFFIX}) --- > set(IPP_LIB_SUFFIX${CMAKE_SHARED_LIBRARY_SUFFIX})
166a167,169
>   ${IPP_LIB_PREFIX}irc${IPP_SUFFIX}${IPP_LIB_SUFFIX} >${IPP_LIB_PREFIX}imf${IPP_SUFFIX}${IPP_LIB_SUFFIX}
>   ${IPP_LIB_PREFIX}svml${IPP_SUFFIX}${IPP_LIB_SUFFIX} 216c219,225 < set(IPP_LIBRARY_DIRS${IPP_ROOT_DIR}/lib/intel64 PARENT_SCOPE)
---
>       if(NOT EXISTS ${IPP_ROOT_DIR}/../compiler/lib/intel64) > message(SEND_ERROR "IPP EM64T libraries not found") > endif() > set(IPP_LIBRARY_DIRS >${IPP_ROOT_DIR}/lib/intel64
>         \${IPP_ROOT_DIR}/../compiler/lib/intel64
>         PARENT_SCOPE)
`
more

Official site

GitHub

Wiki

Documentation