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

Help! Runtime error while loading ippcore-6.1.dll !!

ing_bobbz
Beginner
492 Views
Hi,

I'm new in programming with Intel compiler; indeed, I'm just trying to start my first project, but a strange problem appears.
More in deep, after visual studio 2008 compiles, I run under debug mode, but the program doesn't start. This is the output:

'myApp.exe': Loaded 'H:\\myProject\\myApp.exe', Symbols loaded.
'myApp.exe': Loaded 'C:\\Windows\\System32\\ntdll.dll'
'myApp.exe': Loaded 'C:\\Windows\\System32\\kernel32.dll'
'myApp.exe': Loaded 'H:\\myProject\\cv100.dll'
.....
.....
'myApp.exe': Loaded 'C:\\Windows\\System32\\nsi.dll'
'myApp.exe': Loaded 'C:\\Program Files\\Intel\\Compiler\\11.1\\054\\ipp\\ia32\\bin\\ippcv-6.1.dll'
'myApp.exe': Loaded 'C:\\Program Files\\Intel\\Compiler\\11.1\\054\\ipp\\ia32\\bin\\ippcore-6.1.dll'
First-chance exception at 0x771258c8 in myApp.exe: 0xC0000005: Access violation reading location 0x00000044.

It seems like there are problems in ippcore-6.1.dll.

In order to help understanding, I give a brief description of the project. I use Visual Studio 2008, "simple" C++ language (i.e., not managed, or other microsoft specific version), OpenCV, and, in two or three simple "for" loops, OpenMP (I just only use the "#pragma omp paraller for" directive...).
With C++ compiler the program doesn't have any problem. Now, I just can't realize what happens.

Can someone help?!

Thanks in advance,
Bobbz



0 Kudos
5 Replies
JenniferJ
Moderator
492 Views
>> With C++ compiler the program doesn't have any problem. Now, I just can't realize what happens.

do you mean that if building your app with Visual C++ it works?
which ipp libs do you link with VC?
For OpenCV, do you build the libs yourself or use the .libs direct? there might be compatibility issues.

In any case your question might be better answered by the IPP forum. So I'll transfer you to there.

Thanks,
Jennifer
0 Kudos
Ying_H_Intel
Employee
492 Views
Hi Bobbz,

Afterrun, the program hang there, right?The problem looks the previous OpenCV and Intel OpenMP runtime conflict issue. twokey questions:
1) Which OpenCV version are you using?
2) and how do you link IPP library in the program.are they linked by add "ippcore.lib ippvc.lib" explictily in project propery settingor the IPP libraries areloaded automaticallyby the program (opencv library)itself?

Could you try OpenCV 2.0 and let us know the result?


oras IPP and OpenCV FAQ,
http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-open-source-computer-vision-library-opencv-faq/#3
try to call NumUploadedFunction = cvUseOptimized(0);
at the first place of program

Regards,
Ying


P.S One similiar issue for your reference,

See the KB: http://software.intel.com/en-us/articles/opm-abort-initializing-libguide40dll/

There isaexample about OpenCV and Intel Compiler confilict case. When build a application using the OpenCV 1.0 with Intel Compiler 11.0 Professional. And we could build it successfully but unable to run it with the following error.

OMP: Error #15: Initializing libiomp5md.dll, but found libguide40.lib already initialized.

There are a few workarounds and solutions on this issue.
1) Rebuild the OpenCV library using ICC 11, whichuse libiomp5 library, so no more library conflict happens.
2) Delete IPP PATH from system environment variable or runtime environment not to have OpenCV try to use IPP libraries.
3) Set KMP_DUPLICATE_LIB_OK=TRUE environment variable to ignore the library conflict, which is not really recommended to do though.
4) Use the latest OpenCV whose version is 1.1pre1. This versioned library is built with Microsoft OpenMP library "vcomp.dll" which is compatible with Intel OpenMP library "libiomp5md.dll". So we can use OpenCV + IPP6.x without any errors.
0 Kudos
matthieu_darbois
New Contributor III
492 Views
Hi,

If you link against both IPP and OpenCV (at least for version 1.0, don't know for the others) there might be some issues depending on the link order.

OpenCV use LoadLibrary in order to add IPP capabilities to OpenCV. This calls are called from their DllMain (In fact I think this is a static class initializer, but the effect here is the same) which is a bad behaviour according to MSDN documentation. I ran into that problem a year ago or so and there's a thread talking about that .

If you link in a specific order (I don't remember which goes first and which goes last), it will work because IPP libraries are already loaded. If you link in the reverse order, then you'll see exactly what you're experiencing.

Regards,
Matthieu
0 Kudos
levicki
Valued Contributor I
492 Views
I don't know which version of OpenCV you guys are using, but all the versions I tried from official release to latest SVN had crashes in morphology functions when built using both Intel and Microsoft compiler. Even default pre-built OpenCV 2.0 DLLs and test applications do not pass testing.

There is a slight chance that the OpenCV is causing the problem here.

I would appreciate knowing which OpenCV version Intel deems stable.
0 Kudos
Ying_H_Intel
Employee
492 Views
Hi Igor,

Actually, almost all of OpenCV versions we mentioned in the forumare stable with Intel IPP.
As Matthieu mentioned(in thread), the problem Bobbz post herewere discussed before (you may use Forum Search to find it). The problem most frequently happened when compiler's openmp is on. As OpenCV itself load IPP library automatically by call LoadLibrary or LoadLibraryEx (either directly or indirectly) and at the same time, in main program,the IPP library(includingOpenMPRuntime librarylibiomp5md.dll)was loaded again. This can cause a deadlock or a crash.
The behavious of problem islike
the build processis ok, but when run program, ithang there.(Without any information).

What's your problem behavious? Does it only crash in morphology function or when any ipp function? Do you have a small test case so we can reproduce?

Regards,
Ying

For example,I'm building a small program withtarifut in http://software.intel.com/en-us/forums/showthread.php?t=72771&o=a&s=lr.use OpenCV 1.1pre1, October, 2008 and IPP 6.1.1 dynamic link, MSVC2005 without openmp.

load a png file andcopyit into another image.thec code is as below.

#include "stdafx.h"
#include
#include
#include "ipp.h"
#include "cv.h"
#include "highgui.h"
#include
#include "string.h"

using namespace std;

#define COMP 3
int main()
{

//int nFuncs=cvUseOptimized(1);
// cout<< "number of function optimized is" << nFuncs << endl;
//const char* opencv_libraries = 0;
//const char* addon_modules = 0;
//cvGetModuleInfo(0, &opencv_libraries,&addon_modules );
//printf( "OpenCV: %s\nAdd-on Modules: %s\n",opencv_libraries, addon_modules );

IplImage* dst;
CvSize cvsrcSize;
CvSize cvdstSize;
IppStatus status;


IplImage* src = cvLoadImage( "pic1.png", 1 ); //"ring.bmp"pic1.png

cvsrcSize=cvGetSize(src);
int w= cvsrcSize.width;
int h= cvsrcSize.height;
IppiRect srcRect = { 0, 0,w, h };
IppiSize srcSize = {w, h };

CvSize cvsrcTempSize={w, h};
IppiSize srcTempSize={w, h};
IplImage* srcTemp = cvCreateImage ( cvsrcTempSize,8, COMP);
//Ipp8u backValue[4]={255,255,255,0};
ippiSet_8u_C3R (0, (Ipp8u*) srcTemp->imageData, srcTemp->widthStep, srcTempSize );


status=ippiCopy_8u_C3R( (Ipp8u*) src->imageData, src->widthStep,
(Ipp8u*) srcTemp->imageData,,
srcTemp->widthStep,
srcSize);
return 0;
}



0 Kudos
Reply