Search code examples
c#.netpinvokeopenmpintel-ipp

I am getting the following exception: "Unable to load DLL: The operating system cannot run. (Exception from HRESULT: 0x800700B6)"


This happens when P/Invoking into Intel IPP library. This library in-turn relies on OpenMP.

Here's what I've tried: ​http://software.intel.com/en-us/articles/opm-abort-initializing-libguide40dll/

Should resolve the exception about using two versions of OpenMP together (libguide40.dll and libiomp5md.dll). Removing a local copy of libguide40.dll did not solve the issue. Could you help me to track it down?

I am trying dir /s libguide40.dll: there is no more instances of that DLL, but I am still getting the exception.

Details: I am using P/Invoke generated code as provided by Intel in their samples for IPP.


Solution

    1. The OpenMP DLL that I was using on target machine had incorrect number of bytes in it (probably a network file transfer SNAFU). The way to avoid this mess is to use an archive or MD5.

    2. It was still broken... I had to ensure that initialization of IPP runs only once for the whole application. I used a static Lazy member.

    Thanks for all the help!