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

Static Linking Error - ippcore-7.1 Dependency

Royi
Novice
1,841 Views

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
1,345 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.
0 Kudos
Gennady_F_Intel
Moderator
1,345 Views
if it so, than it looks like the error in VS2010 integration. We need to check it on our side.
0 Kudos
AndrewC
New Contributor III
1,345 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).

0 Kudos
SergeyKostrov
Valued Contributor II
1,345 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.
0 Kudos
Royi
Novice
1,345 Views

Any update?

0 Kudos
SergeyKostrov
Valued Contributor II
1,345 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.
0 Kudos
SergeyKostrov
Valued Contributor II
1,345 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
0 Kudos
SergeyKostrov
Valued Contributor II
1,345 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.
0 Kudos
SergeyKostrov
Valued Contributor II
1,345 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; }
0 Kudos
SergeyKostrov
Valued Contributor II
1,345 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; }
0 Kudos
SergeyKostrov
Valued Contributor II
1,345 Views
... #include "stdio.h" #include "ipp.h" ...
0 Kudos
SergeyKostrov
Valued Contributor II
1,345 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
0 Kudos
SergeyKostrov
Valued Contributor II
1,345 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
0 Kudos
SergeyKostrov
Valued Contributor II
1,345 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
0 Kudos
SergeyKostrov
Valued Contributor II
1,345 Views
A message to Intel IPP forum moderator: One of my post is still Not Shown and please approve it. Thanks.
0 Kudos
AndrewC
New Contributor III
1,345 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.

0 Kudos
SergeyKostrov
Valued Contributor II
1,345 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?
0 Kudos
AndrewC
New Contributor III
1,345 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.

0 Kudos
SergeyKostrov
Valued Contributor II
1,345 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 ).
0 Kudos
petervk
Beginner
1,193 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.

0 Kudos
Reply