I've build ipp speech codec project, and everything is fine with it, but I don't know whether I can to make that project as dll. Is there any special properties that I have to change in my project to build dll? And another question is if I will run that dll on PC that doesn't have installed IPP software, would it work well , or there would be missing some libraries or so?
If you build ipp speech codec project in Microsoft Visual studio, you can change the project's property by Open project's property page =>Configuration Properties=>General=>Configuration Type => change the Static library (.*.lib) to dynamic library (*.dll).
But as i understand, the purposeyou change project to dll is to remove the IPP software dependency,thus you can run that dll on PC that haven't IPP software, right?If yes, thenthe change is not needed . Actually,IPP support 4 kind of link mode. 1. dynamic link 2. static link 3. customer dll link 4. single static link
No.2, 3, 4 guareetee one applicationrun other PCwithout IPP software installed. among of the link mode, theNo.2 seems easiest.You can only change the project property by Open project's property page =>Linker=>Input change ipps.lib ippsc.lib (dynamic)etc. to ipps_l.lib ippsc_l.lib.(static serial library), then produced exe don't depend on IPP software.
Additionally, please note, 1. most ofspeech codec projectsproducestatic librarythemselves, where the IPP library is not needed during compile phase. 2. Only several application project produce exe, which need the static library and IPP library during compile phase. If IPP static libraryare linked during compile, then no IPP library neededduring run time. So as you see, the key is in the phase of compile of the application project.
You can try the No.3 too. Please see the readme \ipp-samples\advanced-usage\linkage\customdll
I'm trying to distribute a couple of my libraries which are using IPP to PCs that don't have IPP installed. For this I've decided to follow option 3 (custom made library) and everything works perfectly for Linux and MacOS but I'm having problems with Windows. I get the customdll files (myIPP_t.dll, myIPP_t.lib) from the ipp-samples example, but I can not link them into a testing program.
I have added the "__declspec(dllexport)" lines before those functions that I want to export and in my Windows7 (64bit) machine that has IPP installed everything runs well. I am using CMake to compile across all platforms, the only difference between UNIX and Windows CMakeLists.txt is that in the former I include the pthread library whereas in the later I don't. The problem comes when I try to run my testing code in a machine with Windows and NO IPP installed... I get several errors like:
error LNK2019: unresolved external symbol _ippsAdd_64f@16 referenced in function "void __cdec1 main(...
This happens in both the Visual Studio 2010 solution created by CMake and also when I run the compiler in a command line:
I am sure that the libraries are where they are supossed to be and that they are in the environmental variables but still it is like the the compiler is not finding the libraries, right? or maybe the libraries do NOT contain the IPP functions that I need... just can't figure out how windows work? Any ideas???
Could you make sure you are exporting ippsAdd_64f function? Use dumpbin from VS2010 command line window. The "dumpbin /exports .lib" must show the list of exported functions. The sample's customdll shows
After I added "ippsAdd_64f" to export.def file, the dumpbin started showing
first sorry for not replying before... I did the "dumpbin /EXPORTS myIPP.lib" and I get something similar to what you wrote in your message:
File Type: LIBRARY
It's not exactly the same since your functions have a "_" before them and a @16 in the end. Does this mean that there is something wrong with the generation of my customdll???
Another question is that I previously thought that I was using these customdll libraries when compiling other libraries but it seems I was making a mistake in Visual Studio... in the "Configuration Properties" of my VS project I was setting the "Intel Performance Libraries">"Use IPP" to "Shared DLL", and I guess that means that VS was going to use the local IPP libraries instead of my customDLL. What should I do in the VS project to use my customDLL libraries instead???