Forums: 

In the directory samples/musicid_file_trackid I do the command:

MAKECMDGOALS=static make

I then get a lot of undefined references to names starting with ipps such as ippsMalloc_32f, ippsDCTFwd_32f_I and ippsMaxAbs_32s.  As far as I can tell these appear to be from the Intel compiler (icc).  Needless to say gcc knows nothing of them.  How should I get static linking working?

Full output:

$ MAKECMDGOALS=static make
Gathering sources for 'linux_x86-64' build...
Gathering libraries for 'linux_x86-64' build...
GNSDK Headers...
Local Headers...
if [ -d _output/linux_x86-64/debug ]; then rm -f -r _output/linux_x86-64/debug; fi
mkdir -p _output/linux_x86-64/debug/

***********************************************
PLATFORM : linux_x86-64
TARGET   : ./sample
SOURCES  : main.c
DEPENDS  : libgnsdk_musicid_file.a libgnsdk_lookup_local.a libgnsdk_storage_sqlite.a libgnsdk_dsp.a libgnsdk_manager.a

gcc  -g -m64 -fPIC -funsigned-char -Wall -Wformat -Wpointer-arith -D_DEBUG -Wno-unused-but-set-variable  -DGNSDK_MUSICID_FILE=1 -DGNSDK_LOOKUP_LOCAL=1 -DGNSDK_STORAGE_SQLITE=1 -DGNSDK_DSP=1 -DGNSDK_MANAGER=1 -D_THREAD_SAFE -D_REENTRANT -DGCSL_STRICT_HANDLES -DGNSDK_STRICT_HANDLES -I_include -Ilinux -I../../builds/../include -I../../builds/../include/linux_x86-64  -c main.c -o_output/linux_x86-64/debug/main.o
cp -fp ../../builds/../lib_static/linux_x86-64/libgnsdk_musicid_file.a libgnsdk_musicid_file.a
cp -fp ../../builds/../lib_static/linux_x86-64/libgnsdk_lookup_local.a libgnsdk_lookup_local.a
cp -fp ../../builds/../lib_static/linux_x86-64/libgnsdk_storage_sqlite.a libgnsdk_storage_sqlite.a
cp -fp ../../builds/../lib_static/linux_x86-64/libgnsdk_dsp.a libgnsdk_dsp.a
cp -fp ../../builds/../lib_static/linux_x86-64/libgnsdk_manager.a libgnsdk_manager.a

gcc  -m64 -Wl,-rpath,'$ORIGIN'  -o sample _output/linux_x86-64/debug/main.o libgnsdk_musicid_file.a libgnsdk_lookup_local.a libgnsdk_storage_sqlite.a libgnsdk_dsp.a libgnsdk_manager.a  -lstdc++ -lpthread -ldl -lrt -lm
libgnsdk_dsp.a(gcsl_fingerprint.o): In function `_fingerprint_init_func':
gcsl_fingerprint.c:(.text+0xa1): undefined reference to `ippStaticInit'
libgnsdk_dsp.a(gn_patchfp.o): In function `patchfp_initialize':
gn_patchfp.c:(.text+0x5): undefined reference to `ippStaticInit'
libgnsdk_dsp.a(CMFingerprinter.o): In function `CMFP_Destroy':
CMFingerprinter.c:(.text+0xc2): undefined reference to `ippsFree'
libgnsdk_dsp.a(CMFingerprinter.o): In function `CMFP_Create':
CMFingerprinter.c:(.text+0x285): undefined reference to `ippsMalloc_32f'
libgnsdk_dsp.a(CMFrameManager.o): In function `CMFM_Destroy':
CMFrameManager.c:(.text+0x211): undefined reference to `ippsDCTFwdFree_32f'
CMFrameManager.c:(.text+0x231): undefined reference to `ippsFree'
libgnsdk_dsp.a(CMFrameManager.o): In function `CMFM_Create':
CMFrameManager.c:(.text+0x34d): undefined reference to `ippsDCTFwdInitAlloc_32f'
CMFrameManager.c:(.text+0x461): undefined reference to `ippsDCTFwdInitAlloc_32f'
CMFrameManager.c:(.text+0x4af): undefined reference to `ippsDCTFwdGetBufSize_32f'
CMFrameManager.c:(.text+0x4bf): undefined reference to `ippsMalloc_8u'
CMFrameManager.c:(.text+0x4d9): undefined reference to `ippsDCTFwdGetBufSize_32f'
CMFrameManager.c:(.text+0x4e5): undefined reference to `ippsMalloc_8u'
libgnsdk_dsp.a(CMFrameManager.o): In function `CMFM_AppendDualPCMData':
CMFrameManager.c:(.text+0xe38): undefined reference to `ippsDCTFwd_32f_I'
CMFrameManager.c:(.text+0xf53): undefined reference to `ippsDCTFwd_32f_I'
libgnsdk_dsp.a(CMHistogramEqualizer.o): In function `hist_eq_dual':
CMHistogramEqualizer.c:(.text+0x152): undefined reference to `ippsMinMax_32f'
CMHistogramEqualizer.c:(.text+0x169): undefined reference to `ippsMinMax_32f'
CMHistogramEqualizer.c:(.text+0x2b4): undefined reference to `ippsSubC_32f_I'
libgnsdk_dsp.a(FixedFAPIFingerprinter.o): In function `FixedFAPIFingerprinterCreate':
FixedFAPIFingerprinter.c:(.text+0x2fb): undefined reference to `ippsMalloc_32s'
FixedFAPIFingerprinter.c:(.text+0x30f): undefined reference to `ippsMalloc_32s'
FixedFAPIFingerprinter.c:(.text+0x34e): undefined reference to `ippsFFTInitAlloc_R_32s'
FixedFAPIFingerprinter.c:(.text+0x3af): undefined reference to `ippsFFTFree_R_32s'
FixedFAPIFingerprinter.c:(.text+0x3d6): undefined reference to `ippsFree'
FixedFAPIFingerprinter.c:(.text+0x3e2): undefined reference to `ippsFree'
FixedFAPIFingerprinter.c:(.text+0x4a7): undefined reference to `ippsFFTGetBufSize_R_32s'
FixedFAPIFingerprinter.c:(.text+0x4ba): undefined reference to `ippsMalloc_8u'
FixedFAPIFingerprinter.c:(.text+0x59e): undefined reference to `ippsAbs_32s_I'
FixedFAPIFingerprinter.c:(.text+0x5a8): undefined reference to `ippsFree'
libgnsdk_dsp.a(FixedFAPIFingerprinter.o): In function `FixedFAPIFingerprinterDelete':
FixedFAPIFingerprinter.c:(.text+0x67c): undefined reference to `ippsFFTFree_R_32s'
FixedFAPIFingerprinter.c:(.text+0x697): undefined reference to `ippsFree'
FixedFAPIFingerprinter.c:(.text+0x6a4): undefined reference to `ippsFree'
FixedFAPIFingerprinter.c:(.text+0x6d1): undefined reference to `ippsFree'
libgnsdk_dsp.a(FixedFAPIFingerprinter.o): In function `ScaleToMaxQ':
FixedFAPIFingerprinter.c:(.text+0x96d): undefined reference to `ippsMaxAbs_32s'
FixedFAPIFingerprinter.c:(.text+0x9e0): undefined reference to `ippsLShiftC_32s_I'
FixedFAPIFingerprinter.c:(.text+0x9fc): undefined reference to `ippsRShiftC_32s_I'
libgnsdk_dsp.a(FixedFAPIFingerprinter.o): In function `ExtractSoftSubFingerprint':
FixedFAPIFingerprinter.c:(.text+0xad9): undefined reference to `ippsMul_32s_ISfs'
FixedFAPIFingerprinter.c:(.text+0xb18): undefined reference to `ippsFFTFwd_RToPerm_32s_Sfs'
FixedFAPIFingerprinter.c:(.text+0xb6b): undefined reference to `ippsMagSquared_32sc32s_Sfs'
libgnsdk_dsp.a(FixedFAPIFingerprinter.o): In function `ApplyLowPassFilter':
FixedFAPIFingerprinter.c:(.text+0x161c): undefined reference to `ippsDotProd_16s32s32s_Sfs'
libgnsdk_dsp.a(FixedFAPIFingerprinter.o): In function `ApplyLowPassHQ':
FixedFAPIFingerprinter.c:(.text+0x166c): undefined reference to `ippsDotProd_16s32s32s_Sfs'
libgnsdk_dsp.a(GNDSP_Resampler.o): In function `GNDSP_DestroyResampler':
GNDSP_Resampler.c:(.text+0x41): undefined reference to `ippsFree'
libgnsdk_dsp.a(GNDSP_Resampler.o): In function `GNDSP_CreateResampler':
GNDSP_Resampler.c:(.text+0x539): undefined reference to `ippsMalloc_32f'
libgnsdk_dsp.a(GNDSP_Resampler.o): In function `GNDSP_Resample':
GNDSP_Resampler.c:(.text+0xa39): undefined reference to `ippsDotProd_32f'
GNDSP_Resampler.c:(.text+0xa51): undefined reference to `ippsDotProd_32f'
GNDSP_Resampler.c:(.text+0xa69): undefined reference to `ippsDotProd_32f'
GNDSP_Resampler.c:(.text+0xa85): undefined reference to `ippsDotProd_32f'
GNDSP_Resampler.c:(.text+0xacf): undefined reference to `ippsDotProd_32f'
libgnsdk_dsp.a(GNDSP_Resampler.o):GNDSP_Resampler.c:(.text+0xb31): more undefined references to `ippsDotProd_32f' follow
collect2: error: ld returned 1 exit status
../../builds/rules_samples.mk:283: recipe for target 'sample-debug' failed
make: *** [sample-debug] Error 1

 

Hi,
We will look into this and get back to you as soon as possible.
Thanks,

What is the conclusion.  The sdk had a bump around the time of my posting, but the issue remains.

Hello,

I want to compile an application with SDK on linux and I have the same problem (I use Code :: Blocks).

My compilation with Visual Studio on Windows work fine but not on Linux.

I have the same issues :

||=== Build: Release in Gracenote (compiler: GNU GCC Compiler) ===|
gcsl_fingerprint.c|| référence indéfinie vers « ippStaticInit »|
gn_patchfp.c|| référence indéfinie vers « ippStaticInit »|
CMFingerprinter.c|| référence indéfinie vers « ippsFree »|
CMFingerprinter.c|| référence indéfinie vers « ippsMalloc_32f »|
CMFrameManager.c|| référence indéfinie vers « ippsDCTFwdFree_32f »|
CMFrameManager.c|| référence indéfinie vers « ippsFree »|
CMFrameManager.c|| référence indéfinie vers « ippsDCTFwdInitAlloc_32f »|
CMFrameManager.c|| référence indéfinie vers « ippsDCTFwdInitAlloc_32f »|
CMFrameManager.c|| référence indéfinie vers « ippsDCTFwdGetBufSize_32f »|
CMFrameManager.c|| référence indéfinie vers « ippsMalloc_8u »|
CMFrameManager.c|| référence indéfinie vers « ippsDCTFwdGetBufSize_32f »|
CMFrameManager.c|| référence indéfinie vers « ippsMalloc_8u »|
CMFrameManager.c|| référence indéfinie vers « ippsDCTFwd_32f_I »|
CMFrameManager.c|| référence indéfinie vers « ippsDCTFwd_32f_I »|
CMHistogramEqualizer.c|| référence indéfinie vers « ippsMinMax_32f »|
CMHistogramEqualizer.c|| référence indéfinie vers « ippsMinMax_32f »|
CMHistogramEqualizer.c|| référence indéfinie vers « ippsSubC_32f_I »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsMalloc_32s »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsMalloc_32s »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsFFTInitAlloc_R_32s »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsFFTFree_R_32s »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsFree »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsFree »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsFFTGetBufSize_R_32s »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsMalloc_8u »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsAbs_32s_I »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsFree »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsFFTFree_R_32s »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsFree »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsFree »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsFree »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsMaxAbs_32s »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsLShiftC_32s_I »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsRShiftC_32s_I »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsMul_32s_ISfs »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsFFTFwd_RToPerm_32s_Sfs »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsMagSquared_32sc32s_Sfs »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsDotProd_16s32s32s_Sfs »|
FixedFAPIFingerprinter.c|| référence indéfinie vers « ippsDotProd_16s32s32s_Sfs »|
GNDSP_Resampler.c|| référence indéfinie vers « ippsFree »|
GNDSP_Resampler.c|| référence indéfinie vers « ippsMalloc_32f »|
GNDSP_Resampler.c|| référence indéfinie vers « ippsDotProd_32f »|
GNDSP_Resampler.c|| référence indéfinie vers « ippsDotProd_32f »|
GNDSP_Resampler.c|| référence indéfinie vers « ippsDotProd_32f »|
GNDSP_Resampler.c|| référence indéfinie vers « ippsDotProd_32f »|
GNDSP_Resampler.c|| référence indéfinie vers « ippsDotProd_32f »|
lib_static/libgnsdk_dsp.a(GNDSP_Resampler.o):GNDSP_Resampler.c|| encore plus de références indéfinies suivent vers « ippsDotProd_32f »|
gcsl_memory_markers.c|| référence indéfinie vers « pthread_key_create »|
gcsl_memory_markers.c|| référence indéfinie vers « pthread_key_delete »|
gcsl_memory_markers.c|| référence indéfinie vers « pthread_getspecific »|
||More errors follow but not being shown.|
||Edit the max errors limit in compiler options...|
||=== Build failed: 50 error(s), 0 warning(s) (0 minute(s), 3 second(s)) ===|

 

 

This problem was he has resolved?

Thank you in advance.

 

Vincent LEVEQUE

We never saw any resolution to this issue.  The sum total of communication is in this message thread.

I had to use dynamic linking and $LD_LIBRARY_PATH for a less than optimal solution. 

Well, it seems the GNSDK requires the Intel IPP library the moment you start working with the DSP module.

The latest version of the GNSDK seems to expect a very old version of the Intel IPP library which isn't available (for free) anymore, which makes it impossible to use the DSP module or any fingerprinting etc...

If Gracenote used the Intel IPP library for their closed DSP code, they should release it all statically or at least give the shared files (commercial products under Windows also ship the redistributable Intel IPP dll files for example).

Since Intel is very strict in their IPP usage, it's impossible to use another version. They have a legacy-version but the application (The GNSDK in this case) needs to be modified to use the legacy verison instead of the normal version.

 

As an example, I solved most of the Intel missing symbols during linking by including the Intel IPP libraries you can get for free now (version 9 update 2), and a lot of missing ipp* symbols went away.

But I'm still getting missing symbols about 'ippsFFTInitAlloc_R_32s' or 'ippsDCTFwdFree_32f' or 'ippStaticInit'. All IPP functions which have been marked deprecated in the Intel IPP library multiple versions back! And GNSDK is still using them, and making it impossible to link against the DSP module this way.

I also get missing symbols about 'gcsl_outbuffer_write' and 'gcsl_outbuffer_create' which I have no clue where to get them from. I can't find any reference of it anywhere else in the GNSDK or in the Intel IPP library so it doesn't seem to be a missing library from those packages. Googling the functions gives very little, so I have no clue where to get that linker dependancy from.

(For the record, linking and running my test applications went fine _until_ I required the DSP module. Everything before that (manager, musicid) linked and ran fine.

Forum Discussions