Community
cancel
Showing results for 
Search instead for 
Did you mean: 
shachar-arieli
Beginner
91 Views

ippi function is undefined

Jump to solution

I am trying to use the function ippiFilterBoxBorder and i keep getting a compiler error of
Error    4    error : identifier "y8_ippiFilterBoxBorder_16u_C1R" is undefined   
Error    3    error : identifier "y8_ippiFilterBoxBorderGetBufferSize" is undefined

If i change the FilterBoxBorder function to FilterBox (which is deprecated) everything compiles and runs with no issue.
I am using the latest c++ Intel compiler 15.0.2.179 on windows

Any idea what am i doing wrong?
 

 

0 Kudos
1 Solution
Sergey_K_Intel
Employee
91 Views

The investigation is simple:
  - ipp.h should include ippi.h,
  - ippi.h should have the declaration:
      IPPAPI (IppStatus, ippiFilterBoxBorderGetBufferSize,(IppiSize roiSize, IppiSize maskSize, IppDataType dataType, int numChannels, int* pBufferSize))

If something wrong in nested file includes, or, you have previous IPP version (I don't remember when BoxBorder functions appeared in IPP), the requested function will be non-declared, so "undefined".

View solution in original post

6 Replies
Sergey_K_Intel
Employee
91 Views

Hi !

It mustn't be so.

"y8_ippiFilterBoxBorder*" along with other CPU-clones "<cpu_letter>_ippiFilterBoxBorder*" functions are in "ippimt.lib" in $(IPPROOT)/lib/<ia32 | intel64> folder.

By the way, what is the diagnostic "Error 4", "Error 3" ? I haven't seen this before. Usually, there are linker errors of this kind.

Could you tell how do you include IPP header files ? Or, you use CPU-specific include files from $(IPPROOT)/tools/<cpu_arch>/staticlib directory ?

shachar-arieli
Beginner
91 Views

Thanks for the quick reply.
I think the number next to the compiler error is just the index of the error

As for the include i have the following 2 lines in this order for the include directories.
$(ICInstallDir)ipp\include\
$(ICInstallDir)ipp\tools\intel64\staticlib

I am including ipp.h

 

Sergey_K_Intel
Employee
91 Views

If you don't specify explicitly
     #include "ipp_y8.h"
the inclusion of only "ipp.h" must not bring this problem, independent of include directories order.

Only in ipp_y8.h there is a redefinition, for example,
   #define ippiFilterBorderGetSize y8_ippiFilterBorderGetSize
That is, instead of pure "ippiFilterBorderGetSize" the compiler, after preprocessing, looks for declaration of "y8_ippiFilterBorderGetSize".

I could suppose the following lines to reproduce this diagnostics:

#include "ipp_y8.h"

void foo()
{
    ippiFilterBoxBorderGetBufferSize();
}

This means, the redefinition exists, but declaration, which is in regular "ipp.h". I have "error C3861: 'y8_ippiFilterBoxBorderGetBufferSize': identifier not found" with this.
 

shachar-arieli
Beginner
91 Views

I tried both including the ipp_y8.h and only ipp.h

The previous errors were with ipp_y8.h and i get a similar error with only ipp.h
error : identifier "ippiFilterBoxBorderGetBufferSize" is undefined

There is something else which is wrong there.

Sergey_K_Intel
Employee
92 Views

The investigation is simple:
  - ipp.h should include ippi.h,
  - ippi.h should have the declaration:
      IPPAPI (IppStatus, ippiFilterBoxBorderGetBufferSize,(IppiSize roiSize, IppiSize maskSize, IppDataType dataType, int numChannels, int* pBufferSize))

If something wrong in nested file includes, or, you have previous IPP version (I don't remember when BoxBorder functions appeared in IPP), the requested function will be non-declared, so "undefined".

View solution in original post

shachar-arieli
Beginner
91 Views

Thanks. You were correct.
The issue was with a previous version of IPP i had installed.
In the options it said to use latest for compiler 15 which is what i am using but i guess somewhere it got messed up and was using a previous version

Anyway its now resolved. Thanks

 

Reply