I am using IPP v6.0 mostly with OpenCV v1.1.1a (but also on its own) under Windows XP Professional 64 SP2 on a Xeon E5420 Harpertown quadcore (EM64T). I am using VC++ 8.0 from Visual Studio 2005 to create my programs. I was using IPP v5.3 successfully with my code. Now that I have upgraded to IPP v6.0, I am having problems.
My programs compile and link successfully both in debug and release mode (x64). When I run them, however, I get the following errors.
OMP abort: Initializing libguide40.dll, but found libiomp5md.dll already initialized. This may cause performance degradation and correctness issues. Set environment variable KMP_DUPLICATE_LIB_OK=TRUE to ignore this problem and force the program to continue anyway. Please note that the use of KMP_DUPLICATE_LIB_OK is unsupported and using it may cause undefined behavior. For more information, please contact Intel Premier Support. [I have done so]
This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix the problem. [What a useless error message!]
I have searched the internet and the Intel site to try to find answers, but nothing I've done has worked. I have set up my environment as follows:
include=C:\Program Files\Intel\IPP\6.0.0.062\em64t\include; ...
INTEL_LICENSE_FILE=C:\Program Files (x86)\Common Files\Intel\Licenses
lib=C:\Program Files\Intel\IPP\6.0.0.062\em64t\lib;C:\Program Files\Intel\IPP\6.0.0.062\em64t\stublib; ...
Path=C:\Program Files\Intel\IPP\6.0.0.062\em64t\bin; ...
All the IPP refs are first. I've used the following compiler flags as recommended:
/I "C:\Program Files\Intel\IPP\6.0.0.062\em64t\include"
The IPP include is first in the list. VC++ 8.0 does not recognize the options "/Qopenmp-lib:compat" and "/Qopenmp-link:dynamic", and therefore ignores them.
And the following linker flags:
The IPP library paths are first in the list. The linker does not recognize "/Qopenmp-link:dynamic" and ignores it. Also the inputs to the linker are, in this order:
I neither know what I am doing wrong nor do I know what to try next. Thank you for your help.
If you're application links with some modules of ipp6.0 and openCV there's a bug in OpenCV which could fail to load ipp6.0 when searching for optimized modules.
In that case, if you have ipp5.x installed, openCV could be trying to load these dlls along with libguide40.dll. This won't show up in DW because these libraries are loaded with LoadLibrary and thus are not linked in...
Second chance exception 0xC0000005 (Access Violation) occurred in "c:windowswinsxsamd64_microsoft.vc80.debugmfc_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_57812684MFC80D.DLL" at address 0x000000007827E692.
Exited "d:programsvisual studio 2005projectscvstereoframeworkx64debugSTEREOFRAMEWORKD_64.EXE" (process 0xCBD4) with code 128 (0x80).
You could check easily if the error is really due to OpenCV.
As I understand, you compiled OpenCV by yourself so the test will be easy. Just modify cxswitcher.cpp in cxcore so that VERBOSE_LOADING is defined to 1 (instead of 0) then compile cxcore and cxcoretest. You'll then see what optimized modules are loaded. If anything other version than ipp 6.0 loads then the issue is here.
If that's the case, I can provide you with a workaround for cxswitcher which is far from optimal (some optimized libraries won't load despite the fact they're present).