I'm building a dll, dynamicaly linked against IPP 6.0.1.
When trying to load my DLL from MATLAB, I get the above error and matlab crashes.
I Tried to remove libiomp5md.lib from the dependency list of the linker, but the error still occurs.
What is the problem?
Any help would be appreciated.
--Lior
Link Copied
Hi,
It seems that your using two versions of OpenMP implementation (libguide40 and libiomp5md).
Ipp 6 DLLs use libiomp5md for multithreading. So you have to check what's using libguide40 (for example IPP 5).
If you've got the sources of the libraries using libguide40, you should compile them for use with libiomp5md.
As an alternative, you can link your dll against IPP non threaded static libraries.
With the information you've provided, there's no way to tell more than that. If you've got more information, I'd be happy to help.
Regards
Hi,
It seems that your using two versions of OpenMP implementation (libguide40 and libiomp5md).
Ipp 6 DLLs use libiomp5md for multithreading. So you have to check what's using libguide40 (for example IPP 5).
If you've got the sources of the libraries using libguide40, you should compile them for use with libiomp5md.
As an alternative, you can link your dll against IPP non threaded static libraries.
With the information you've provided, there's no way to tell more than that. If you've got more information, I'd be happy to help.
Regards
Thanks for answering. I did manage to get my DLL to work after linking it staticly. Matlab is the only suspect I can think of right now (for using the older version of openMP), since no other versions of IPP are installed, and visual studio is the only other appliction running on the machine.
How can I tell what version of openMP is being used (if any) and who is using it?
Thanks.
--Lior
You should load matlab with your working DLL. Then retrieve a list of all loaded DLLs (if you attach a debugger you can see all loaded modules, or simpler, with ProcessExplorer if you got it). You should then make a pass with dependency walker on each of these DLLs and the main application to see which one is loading libguide40 (ignore default MS libraries as well as ipp 6 to speed up the process).
If you're using default build of OpenCV 1.0, it uses libguide40 for multithreading.
Regards
It is known that Matlab use IPP internally, as far as I know in image processing toolbox, may in some others too. The version of IPP they use is either IPP 2.0 or IPP 5.3 depending on version of Matlab. So, for you to use IPP6.0 in Matlab it is necessary to link statically or to build IPP custom DLL (the example of how to create IPP custom DLL is provided in IPP sample package, see 'advanced-usagelinkage' folder in sample package)
Vladimir
For more complete information about compiler optimizations, see our Optimization Notice.