Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Royi
Novice
525 Views

Static Linking Error - ippcore-7.1 Dependency

Hello,

I have Intel Composer 2012 XE with Intel IPP 7.1.0.089.

I set in the project properties under Intel Libraries - "Use IPP: Single Threaded Static Library".

Yet after compiling I still get dependency of 'ippcore-7.1' and only 'ippcore-7.1'.

I use Intel Compiler for the compiling process.

How could that be? How could that be resolved? I think it is a bug since I use MS Compiler I don't have that dependency (Same settings).

I use Windows 7 64 Bit.

All paths are defined well.

0 Kudos
35 Replies
Royi
Novice
391 Views

Update: If I turn off the option "Use Intel Optimized Headers" (Under Configuration Properties -> C / C++ -> Optimization [Intel C++]) the dependency is removed. Could that be explained? Thanks.
Gennady_F_Intel
Moderator
391 Views

if it so, than it looks like the error in VS2010 integration. We need to check it on our side.
AndrewC
New Contributor I
391 Views

This has not been fixed in Intel Compiler 13.

Settting /Quse-intel-optimized-headers causes a dependency on the IPP "threaded DLL" libraries, no matter what the settings on the project properties such as IPP : Static Libraries. This is a major PITA, especially since there are so many funky things happening in IPP right now ( functions being removed, threaded libraries deprecated etc).

SergeyKostrov
Valued Contributor II
391 Views

>>If I turn off the option "Use Intel Optimized Headers" (Under Configuration Properties -> C / C++ -> Optimization [Intel C++]) >>the dependency is removed. Could that be explained? It is possible that in some header a #pragma comment(...) directive is used: ... #pragma comment ( lib, "ippcore-7.1.lib" ) ... and that is why it creates the dependency.
Royi
Novice
391 Views

Any update?

SergeyKostrov
Valued Contributor II
391 Views

>>...Any update? Could you provide a small test project ( for example with a call to one IPP function ) for VS 2005, VS 2008 or VS 2010 that reproduces the problem and I'll take a look at it.
SergeyKostrov
Valued Contributor II
391 Views

>>...How could that be? How could that be resolved? I think it is a bug since I use MS Compiler I don't have that dependency (Same settings). I completed a verification and I have Not found any issues or problems when my test application was compiled with Intel Parallel Studio XE 2013 Update 2 ( VS 2008 Professional Edition ). Here are screenshoots: [ IPP Dynamic Linking ] ippdynamiclinking.jpg [ IPP Static Linking ] ippstaticlinking.jpg
SergeyKostrov
Valued Contributor II
391 Views

Please Don't pay attention ( Ignore ) for an error with IESHIMS.DLL. This is an issue with the Windows 7 and it is Not related to IPP.
SergeyKostrov
Valued Contributor II
391 Views

[ Test-case codes for Dynamic linking ] ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IppTestApp.cpp // icl.exe /MD /Qipp /Qipp-link:dynamic IppTestApp.cpp /* Note 1: IPP Library Codes: e9 - AVX m7 - SSE3 u8 - SSSE3 y8 - SSE4.1/4.2 Note 2: If Intel C++ compiler option /Qipp is Not used there are Linker errors: LNK2019: unresolved external symbol ippsGetLibVersion referenced in function main LNK1120: 1 unresolved externals Note 3: Compilation: icl.exe /MD /Qipp /Qipp-link:dynamic IppTestApp.cpp Execute: IppTestApp.exe Output: Dynamic linking of IPP library Library Name : ippSP AVX (e9) Library Version : 7.1.1 (r37466) Library Build Date: Sep 24 2012 Dependencies: ippcore-7.1.dll ipps-7.1.dll ippse9-7.1.dll */ #include #include #pragma comment ( lib, "ippcore.lib" ) // When /Qipp-link:dynamic is used int main( void ) { ippInit(); // When /Qipp-link:dynamic is used printf( "Dynamic linking of IPP library\n" ); const IppLibraryVersion *pLibVer = NULL; pLibVer = ::ippsGetLibVersion(); printf( "Library Name : %s\n", pLibVer->Name ); printf( "Library Version : %s\n", pLibVer->Version ); printf( "Library Build Date: %s\n", pLibVer->BuildDate ); return ( int )0; }
SergeyKostrov
Valued Contributor II
391 Views

[ Test-case codes for Static linking ] ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // icl.exe /MD /Qipp /Qipp-link:static IppTestApp.cpp /* Note 1: IPP Library Codes: e9 - AVX m7 - SSE3 u8 - SSSE3 y8 - SSE4.1/4.2 Note 2: If Intel C++ compiler option /Qipp is Not used there are Linker errors: LNK2019: unresolved external symbol ippsGetLibVersion referenced in function main LNK1120: 1 unresolved externals Note 3: Compilation: icl.exe /MD /Qipp /Qipp-link:static IppTestApp.cpp Execute: IppTestApp.exe Output: Static linking of IPP library Library Name : ippSP AVX (e9) Library Version : 7.1.1 (r37466) Library Build Date: Sep 24 2012 Dependencies: No Any dependencies */ #include #include int main( void ) { ippStaticInit(); // When /Qipp-link:static is used printf( "Static linking of IPP library\n" ); const IppLibraryVersion *pLibVer = NULL; pLibVer = ::ippsGetLibVersion(); printf( "Library Name : %s\n", pLibVer->Name ); printf( "Library Version : %s\n", pLibVer->Version ); printf( "Library Build Date: %s\n", pLibVer->BuildDate ); return ( int )0; }
SergeyKostrov
Valued Contributor II
391 Views

... #include "stdio.h" #include "ipp.h" ...
SergeyKostrov
Valued Contributor II
391 Views

>>...Yet after compiling I still get dependency of 'ippcore-7.1' and only 'ippcore-7.1'. >> >>I use Intel Compiler for the compiling process... I finally reproduced your issue with Visual Studio 2008 Professional Edition & Intel C++ compiler XE 2013 Update 2 & IPP 7.1.x. Once again, this is Not a bug and you need to verify that IPP related options are matching to each other (!): VS -> Select Build Components -> Intel IPP -> Use IPP -> Shared DLL and /Qipp /Qipp-link:dynamic See screenshoot: that demonstrates dependencies ( Not matching options ): ippstaticlinking1.jpg
SergeyKostrov
Valued Contributor II
391 Views

Part 2 >>>>...Yet after compiling I still get dependency of 'ippcore-7.1' and only 'ippcore-7.1'. >>>> >>>>I use Intel Compiler for the compiling process... >> >>I finally reproduced your issue with Visual Studio 2008 Professional Edition & Intel C++ compiler XE 2013 Update 2 & IPP 7.1.x. >>Once again, this is Not a bug and you >>need to verify that IPP related options are matching to each other (!): VS -> Select Build Components -> Intel IPP -> Use IPP -> Single-threaded Static Library and /Qipp /Qipp-link:static See screenshoot: that demonstrates dependencies ( matching options ): ippstaticlinking2.jpg
SergeyKostrov
Valued Contributor II
391 Views

Part 1 will be shown later since it is moderated... Just in case this is an example of configuration with Dynamic ( Shared ) IPP libraries: VS -> Select Build Components -> Intel IPP -> Use IPP -> Shared DLL and /Qipp /Qipp-link:dynamic
SergeyKostrov
Valued Contributor II
391 Views

A message to Intel IPP forum moderator: One of my post is still Not Shown and please approve it. Thanks.
AndrewC
New Contributor I
391 Views

With regards to this thread. 

I have absolutely no issues with static vs. dynamic IPP as long as I do not use the use optimized intel headers option. As long as "use optimized intel headers" is off, the IPP link options works as designed.

SergeyKostrov
Valued Contributor II
391 Views

>>...I have absolutely no issues with static vs. dynamic IPP as long as I do not use the use optimized intel headers option... What happens when you turn that option On?
AndrewC
New Contributor I
391 Views

If I turn that option on, then the final EXE will depend on the dynamic IPP DLLs no matter what the IPP linking option -  assuming the code contains some mathematical function that is diverted to IPP via some header magic in the intel math headers.

SergeyKostrov
Valued Contributor II
391 Views

>>...If I turn that option on, then the final EXE will depend on the dynamic IPP DLLs no matter what the IPP linking option... It is Not clear for me how IPP headers could be related to Intel Optimized headers ( the latter ones are located in ( InstallDir )\Composer XE 20xx\Compiler\Include folder ).
petervk
Beginner
239 Views

Sergey - The problem appears with the combination of Intel Studio XE 2013 and Visual Studio 2012, not VS2008. When VS 2012 is used, there no longer is an option to enable /Qipp and /Qipp-link:static. The linker emits errors:

1>xilink : warning #10006: ignoring unknown option '/Qipp'
1>xilink : warning #10006: ignoring unknown option '/Qipp-link:static'

The resulting program "can't start because ippcore-7.1.dll is missing from your system." Unfortunately, even disabling the use of the Intel Optimized Headers does not enable any of our applications to run, even though the "Use IPP" option is set to "Single-threaded Static Library". Compiling the same code with Intel Studio XE 2011 and Visual Studio 2010 successfully creates executables that are statically linked against the IPP libraries.

This is a bug with Studio XE 2013 and Visual Studio 2012. We no longer have VS 2008 installed, so I cannot say whether VS2012 is required to trigger the bug with static linking. It is, however, sufficient. Also note that executables compiled with the debug libraries also are linked against the IPP dll's irrespective of whether static linking is used.

Reply