>Deconvolution.obj : error LNK2019: unresolved external symbol _ippiFFTInv_PackToR_32f_C1IR referenced in function "signed char __cdecl MyIppBasedCorrelation(float *,float *,float *,unsigned int,unsigned int,unsigned char *,int,struct FFT2DSpec_R_32f *)" (?MyIppBasedCorrelation@@YACPAM00IIPAEHPAUFFT2DSpec_R_32f@@@Z)
and many others linker error.
This I get when compiling 32 bits my own dll library. When compiling 64 bits everything goes well. The next strange thing is that when I use the same code building standalone application 32 adn 64 bits works both flawlesly. I checked compiler settings, paths hundred times and nearly ready to go to my shrink.
I suspect there can be some preprocessor setting, that is wrong, but not sure about it. Anyway this thing drives me crazy, because I wanted to release my app last week. The worst thing is, that I know that IPP works great in my regular work - we use it every day, but my own installation sucks. This is a clear proof, that there is something wrong between my chair and my keyboard ;-)
Here are a couple of things to consider:
- Did you try to compile the application on a different computer?
- Did you try to compare your IPP installation withIPP installation on a different computer?
- How many IPPinstallations do you have on your computer?
- Did you check SET and PATH environment variables?
- Did you check a Visual Studio's options?
'Main Menu -> Tools -> Options -> Project and Solutions -> VC++ Directories -> Include Files & Library Files'
- Would you be able to create a simple reproducer of the link error LNK2019?
In fact the name of this function in the library (mangled name) is "_ippiFFTInv_PackToR_32f_C1IR@16". This is how the function names stored in libraries.
Usually the absence of "@XX" suffix means, that corresponding function declaration (prototype) doesn't get MS "__stdcall" attribute. Look at the compilation stage warnings, try to find out where you missed correct function declaration.
I tried today link the solution on 2 different workstations (different installation of IPP), but got the same result. Linker error.
Sergey, thanks very much. In fact I tried to check ippi.lib file and I found out the same thing as you(I mean the suffix @xx is missing, but I'm not that familiar with compilers so I had no idea what does it mean). In this time I dont know how to tell VS 2005 compiler to use _stdcall atribubute for these functions. Will google it a little, and I'll hopefully solve it somehow.
Did you check Linker settings? This is a Linker error and it is not related to a "wrong" declaration of the
IPP function 'ippiFFTInv_PackToR_32f_C1IR'.
As you stated you managed to compile and linka 64-bit configuration. Then, for a 32-bitconfiguration
compilation was successful, but it fails to link IPP libraries.
A Linker error:
LNK2019: unresolved external symbol _ippiFFTInv_PackToR_32f_C1IR
means thatsome IPP library from Image Processing domain is not included for a32-bit configuration.
I use _WIN32WCE macro for Embedded platforms andI couldn't imaging that it couldaffect calling conversions in IPP.
So, is that a bug or a feature of IPP? What do you think?
thank you all
Add some relatedinformation from Intel Compiler documentation,
Naming Conventions inC/C++
name (Linux OS)
_name (Windows OS)
_name (Mac OS X)
Mixed case preserved
C (Windows OS only)
Mixed case preserved
name@@decoration (Linux OS)
_name@@decoration (Windows OS)
__decorationnamedecoration (Mac OS X)
Mixed case preserved
In the preceding table:
The leading underscore (such as _name) is used on Windows operating systems based on IA-32 architecture only.
@n represents the stack space, in decimal notation, occupied by parameters on Windows operating systems based on IA-32 architecture only.
For example, assume a function is declared in C as:
extern int __stdcall Sum_Up( int a, int b, int c );
Each integer occupies 4 bytes, so the symbol name placed in the .OBJ file on systems based on IA-32 architecture is:
On systems based on Intel 64 architecture, the symbol name placed in the .OBJ file is:
1)setup size increase +70%
2)linking problems (4 days)
3)AMD processor issues
4)Ipp FT problem
.... and the overal speedup is about 20%.
in other words, I quit, IPP means for me more problems than benefits.
thank you again and peace :-)