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

Unreference externals when including v8 optimizations in custom DLL

mikew123
Beginner
301 Views
I am trying to create a custom DLL using IPP 7.0 to compare with our current implementation of IPP. However, I am having some trouble creating a custom DLL. When I create a custom dll using only the optimizations for w7 architecture everything completes fine. However, when I try to include optimizations for v8 architecture I get the following errors:

1> Creating library .\\..\\..\\Build\\Debug\\GenIPP.lib and object .\\..\\..\\Build\\Debug\\GenIPP.exp

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippsFilterMedian_16s_I@12

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippsStdDev_64f@12

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippsPowerSpectr_64fc@12

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippsAddC_64f_I@16

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippsAddC_16s_I@12

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiCrossCorrValid_Norm_32f_C1R@40

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiSqrDistanceValid_Norm_32f_C1R@40

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiCrossCorrValid_NormLevel_8u32f_C1R@40

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiCrossCorrValid_NormLevel_32f_C1R@40

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiThreshold_GTVal_8u_AC4IR@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiThreshold_GTVal_8u_C1IR@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiSub_8u_AC4IRSfs@28

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiSub_8u_AC4RSfs@36

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiScale_16s8u_AC4R@28

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiResize_8u_C1R@68

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiOr_8u_AC4IR@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiMulCScale_8u_AC4IR@20

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiMulCScale_8u_C1IR@20

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiMulC_8u_AC4RSfs@32

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiMulC_8u_AC4IRSfs@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiMulC_8u_C1IRSfs@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiMul_8u_AC4RSfs@36

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiMul_8u_C1RSfs@36

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiMirror_8u_AC4IR@20

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiAddC_16s_AC4IRSfs@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiMinMax_8u_C1R@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiMinMax_8u_AC4R@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiMaxIndx_32f_C1R@28

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiMalloc_32f_C1@12

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiMalloc_16s_AC4@12

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiMalloc_16s_C1@12

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiMalloc_8u_C1@12

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiLShiftC_8u_AC4IR@20

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiLShiftC_8u_C1IR@20

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiHistogramEven_8u_AC4R@36

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiHistogramEven_8u_C1R@36

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiResizeGetBufSize@44

1>NMAKE : fatal error U1077: '"c:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\bin\\link.exe"' : return code '0x460'

1>Stop.

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterSobelVert_16s_C1R@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterSobelVert_8u16s_C1R@28

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterSobelVert_8u_AC4R@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterSobelVert_8u_C1R@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterSobelHoriz_16s_C1R@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterSobelHoriz_8u_C1R@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterSharpen_8u_AC4R@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterSharpen_8u_C1R@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterRow_16s_AC4R@40

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterMin_8u_AC4R@40

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterMin_8u_C1R@40

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterMedian_8u_C1R@40

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterMedianCross_8u_C1R@28

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterMax_8u_AC4R@40

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterMax_8u_C1R@40

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterLaplace_16s_AC4R@28

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterLaplace_16s_C1R@28

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterLaplace_8u_AC4R@28

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterGauss_8u_AC4R@28

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterGauss_8u_C1R@28

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterColumn_8u_AC4R@40

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterColumn_8u_C1R@40

1>NMAKE : fatal error U1077: '"c:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\bin\\nmake.EXE"' : return code '0x2'

1>Stop.

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterBox_16s_C1R@40

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilterBox_8u_C1R@40

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiFilter_16s_AC4R@48

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiErode3x3_8u_AC4IR@16

1>Project : error PRJ0019: A tool returned an error code from "Performing Custom Build Step"

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiErode3x3_8u_AC4R@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiErode3x3_8u_C1IR@16

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiErode3x3_8u_C1R@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiDilate3x3_8u_AC4IR@16

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiDilate3x3_8u_AC4R@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiDilate3x3_8u_C1IR@16

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiDilate3x3_8u_C1R@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiCopyReplicateBorder_8u_AC4R@40

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiCopy_16s_C4C1R@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiCopy_16s_C1C4R@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiCopy_8u_C4C1R@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiAlphaComp_8u_AC4R@36

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiAddC_8u_AC4IRSfs@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiAddC_8u_C1IRSfs@24

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiAdd_8u_AC4RSfs@36

1>GenIPP.obj : error LNK2001: unresolved external symbol _v8_ippiAdd_8u_AC4IRSfs@28

1>.\\..\\..\\Build\\Debug\\GenIPPd.dll : fatal error LNK1120: 79 unresolved externals

Do these functions not have optimizations for the v8 architecture? If not, how can I build the dll to include v8 architecture optimizations for the other 81 functions?

I am including the ippcore_l, ipps_l, ippi_l, and ippcv_l libraries and am trying to export about 160 functions. From the errors above, it appears that roughly half of them do not have implementations for the v8 architecture. Is this correct, or am I missing something?

Thanks in advance.

0 Kudos
5 Replies
Vladimir_Dudnik
Employee
301 Views

There should be V8 prefixes, you may check searching "v8" symbols in library files directly. How did you include V8 optimization in your custom DLL build?

Vladimir

0 Kudos
Chao_Y_Intel
Moderator
301 Views


Hello,

Could youcheck on the following article?

http://software.intel.com/en-us/articles/smart-dispatcher-for-atommerom-processor-optimized-libraries/

Considering both v8 and s8 optimization code are for supplemental SSE3 instructions, they are combined v8,s8 (and u8,n8) into a single "smart dispatch" library.

You can include \ipp\tools\ia32\staticlib\ipp_v8.h file if you want to use CPU specific library.

Thanks,
Chao

0 Kudos
mikew123
Beginner
301 Views

As far as the libraries, I only see "w7" symbols for the problematic functions. There certainly are some "v8" symbols, but not for the unresolved symbols.Could the library is missing them? I am creating the DLL the same way as I have in the past, where a series of #define statements in dllmain.c first determines which prefixes to include, and then another #define to append the prefix to a list of functions in a header file when it is included. I just added v8 as yet another prefix that could be appended to the list of functions. It seems to be working for about half of the functions.

I also tried to read the article referenced in the third post, but it said I do not have access. I was logged in at the time, do I need to do anything special to read it?

0 Kudos
Chao_Y_Intel
Moderator
301 Views

Hello,

The error has been fixed for that page. Could you try it again?

http://software.intel.com/en-us/articles/smart-dispatcher-for-atommerom-processor-optimized-libraries/

If you look at the following file, you can find the missing _v8_xxx is redirect to _s8_xxx function. \ipp\tools\ia32\staticlib\ipp_v8.h

Thanks,
Chao

0 Kudos
Pavel_B_Intel1
Employee
301 Views
Hi mikew123!

You use wrong way to link custom DLL.You create your own dispatcher - it don't work with IPP 7.0 - right. There is "custom dll" sample in the IPP samples which show the rightway how to create custom DLL:
You should create you own DllMain function and create export.def file with list of IPP fucntions - this way should work fine.

If you have any problems with it I will glad to help you

Pavel
0 Kudos
Reply