Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.

Problem using IPP 9.0 legacy libraries

Sid_Prosodie
Beginner
668 Views

I'm trying to update a library built with IPP 7.0 to the latest version, 9.0 Update 1. It used the IPP speech codec libippsc which has been removed from official IPP 9.0 product, so I downloaded and install the IPP 9.0 legacy libraries (available with 9.0 release).

I've updated the corresponding sources, it's compiling fine, but when doing [static] linking, I get some errors, conflict between libippsc90lgc and libippcore :I've reproduced below some interesting parts of the linking command and the resulting error messages :

/usr/bin/cc  -fPIC -m64  -Wall -Wextra -Wbad-function-cast -Wstrict-prototypes -march=core2 -mfpmath=sse -pthread -g -O3 -D_XOPEN_SOURCE=600 -D_DEFAULT_SOURCE -D_BSD_SOURCE -DORTP_INET6 -DUSE_INTEL_IPP90LEGACY -DUSE_INTEL_IPP -DG729  [...] /opt/intel/ipp90legacy_lin/linux/lib/intel64/threaded/libippsc90lgc.a /opt/intel/ipp-9.0/ipp/lib/intel64/threaded/libipps.a /opt/intel/ipp-9.0/ipp/lib/intel64/threaded/libippcore.a -lcrypto -lpthread -lm -lortp -lrt -laio
/opt/intel/ipp-9.0/ipp/lib/intel64/threaded/libippcore.a(owncpufeatures.o): In function `ownGetMaskFeatures':
/localdisk/commander/production/ipp901gold/linux_intel64/sources/core/src/owncpufeatures.c:(.text+0x0): multiple definition of `ownGetMaskFeatures'
/opt/intel/ipp90legacy_lin/linux/lib/intel64/threaded/libippsc90lgc.a(owncpufeatures.o):/localdisk/commander/lgc90/sources/core/src/owncpufeatures.c:(.text+0x0): first defined here
/opt/intel/ipp-9.0/ipp/lib/intel64/threaded/libippcore.a(owncpufeatures.o): In function `ownGetFeature':
/localdisk/commander/production/ipp901gold/linux_intel64/sources/core/src/owncpufeatures.c:(.text+0x3c0): multiple definition of `ownGetFeature'
/opt/intel/ipp90legacy_lin/linux/lib/intel64/threaded/libippsc90lgc.a(owncpufeatures.o):/localdisk/commander/lgc90/sources/core/src/owncpufeatures.c:(.text+0x300): first defined here
/opt/intel/ipp-9.0/ipp/lib/intel64/threaded/libippcore.a(owncpufeatures.o): In function `ownSetFeatureMask':
/localdisk/commander/production/ipp901gold/linux_intel64/sources/core/src/owncpufeatures.c:(.text+0x3e0): multiple definition of `ownSetFeatureMask'
/opt/intel/ipp90legacy_lin/linux/lib/intel64/threaded/libippsc90lgc.a(owncpufeatures.o):/localdisk/commander/lgc90/sources/core/src/owncpufeatures.c:(.text+0x320): first defined here
/opt/intel/ipp-9.0/ipp/lib/intel64/threaded/libippcore.a(owncpufeatures.o): In function `ownMaskIsFeatures':
/localdisk/commander/production/ipp901gold/linux_intel64/sources/core/src/owncpufeatures.c:(.text+0x420): multiple definition of `ownMaskIsFeatures'
/opt/intel/ipp90legacy_lin/linux/lib/intel64/threaded/libippsc90lgc.a(owncpufeatures.o):/localdisk/commander/lgc90/sources/core/src/owncpufeatures.c:(.text+0x340): first defined here
collect2: error: ld returned 1 exit status

How could I fix this linking problem ?

   Thanks.

0 Kudos
5 Replies
Shaojuan_Z_Intel
Employee
668 Views

Hi Sid,

Thanks for your information. What changes did you make in the sources?  

0 Kudos
Sid_Prosodie
Beginner
668 Views

      Hi Shaojuan,

I've added new include file from the IPP 90 legacy library (as described in documentation) :

#ifdef USE_INTEL_IPP90LEGACY
/* I know these fonctions are obsolete */
#  define IPP_LEGACY_WRN ""

#  include "ippsc90legacy.h"
#endif

I've also updated the 'usc' sample library from 7.0 to latest available, in 8.0, and added the same include file in these sources…

 

0 Kudos
Sid_Prosodie
Beginner
668 Views

FYI, I' ve tried to change the order of IPP libraries from :  ipp90lgc   -   ipps  - ippcore

to :   ippcore  - ipp90lgc - ipps

and the link edition runs now flawessly :-)    I'll check now itf the resulting library is running well.

 


 

0 Kudos
Sid_Prosodie
Beginner
668 Views

The change in library order was a bad idea, if the target library linking worked, I can't use it as required symbols were missing :-(

I've checked the 'readme.txt' from IPP 90 legacy package, and found I've forgotten to add the include "ippsc90legacy_redef.h" ; as I used also some legacy functions from IPP S library, I added also "ipps90legacy.h" and "ipps90legacy_redef.h".

Looking at Intel IPP 9.0 documentation, I saw I also need to add IPP VM module when using IPP S.

With all these updates, the library building is now OK, and also its use :-)

 

   Thanks for your answer which drove me on the right track !

0 Kudos
Sergey_K_Intel
Employee
668 Views

Hi!

Probably, you don't need to unclude redefs header files explicitly, because they are included in the corresponding "ipp*legacy.h" files.

0 Kudos
Reply