- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I'm trying to link statically on Linux with v5.3 of IPP. We have a C++ object called SPXToolboxIPP that calls IPP functions. This is an enviornment that links fine when I link with the dynamic libraries (in 'sharedlib'), now I'm trying to link with the libraries in 'lib'. With lib I get many, many linker resolution errors, a sample follows:
../SPXIntel/Debug/libSPXIntel.a(SPXToolboxIPP.o): In function `SPXToolboxIPP::mtranspose(cfloat32*, cfloat32*, unsigned int, unsigned int)':
/home/spxuser/svn/spxc/SPXIntel/SPXToolboxIPP.cpp:2599: undefined reference to `ippmTranspose_m_32f'
/home/spxuser/svn/spxc/SPXIntel/SPXToolboxIPP.cpp:2602: undefined reference to `ippmTranspose_m_32f'
../SPXIntel/Debug/libSPXIntel.a(SPXToolboxIPP.o): In function `SPXToolboxIPP::mmult(float*, unsigned int, unsigned int, float*, unsigned int, unsigned int, float*)':
/home/spxuser/svn/spxc/SPXIntel/SPXToolboxIPP.cpp:2583: undefined reference to `ippmMul_mm_32f'
../SPXIntel/Debug/libSPXIntel.a(SPXToolboxIPP.o): In function `SPXToolboxIPP::szero(cfloat32*, unsigned int)':
/home/spxuser/svn/spxc/SPXIntel/SPXToolboxIPP.cpp:2569: undefined reference to `ippsZero_32fc'
This is what I use in our make file when linking dynamically (which works):
EXTRALIBS = -lippacem64t -lippchem64t -lippsem64t -lippvmem64t -lippmem64t -lguide -lippsrem64t -lippcoreem64t -lpthread
EXTRALIBDIR = -L$(IPPROOT)/sharedlib
This is what I use to link statically (which does not work - linker errors, tried to make it work by including just about every IPP library):
EXTRALIBS = -lippacemergedem64t -lippacmergedem64t -lippccemergedem64t -lippccmergedem64t -lippchemergedem64t -lippchmergedem64t -lippcvemergedem64t -lippcvmergedem64t -lippdcemergedem64t -lippdcmergedem64t -lippiemergedem64t -lippimergedem64t -lippjemergedem64t -lippjmergedem64t -lippmemergedem64t -lippmmergedem64t -lippremergedem64t -lipprmergedem64t -lippscemergedem64t -lippscmergedem64t -lippsemergedem64t -lippsmergedem64t -lippsremergedem64t -lippsrmergedem64t -lippvcemergedem64t -lippvcmergedem64t -lippvmemergedem64t -lippvmmergedem64t -lippcoreem64t -lpthread
EXTRALIBDIR = -L$(IPPROOT)/lib
This is the static link command line:
g++ -L/opt/intel/ipp/5.3.4.080/em64t/lib -o Proc Proc.o -lippacemergedem64t -lippacmergedem64t -lippccemergedem64t -lippccmergedem64t -lippchemergedem64t -ippchmergedem64t -lippcvemergedem64t -lippcvmergedem64t -lippdcemergedem64t -lippdcmergedem64t -lippiemergedem64t -lippimergedem64t -lippjemergedem64t -lippjmergedem64t -lippmemergedem64t -lippmmergedem64t -lippremergedem64t -lipprmergedem64t -lippscemergedem64t -lippscmergedem64t -lippsemergedem64t -lippsmergedem64t -lippsremergedem64t -lippsrmergedem64t -lippvcemergedem64t -lippvcmergedem64t -lippvmemergedem64t -lippvmmergedem64t -lippcoreem64t -lpthread -lrt
This is the first time I've tried to link IPP statically on Linux. I have linked both dynamically and staticly on Windows.
I believe I'm including the correct libraries in the link command. Is list a Linux library link order issue? (does that even still exist?) Is it a C++ issue? (function naming issue?)
Update: I was able to replicate this issue (failing to link) on other Linux platforms using both IPP 5.3 and the new 6.0 - I'm curious why the same approach works on Windows but not on Linux?
I believe I'm doing everything the documentation says for this and could use some help here!
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Vladimir
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Yes, on Windows, libraries order does not matter because of two-pass linker.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page