|
在CCS编译Cvhaar.cpp的时候,需要调用cvIntegral 等函数,于是我把cvsumpixels.cpp加入到CCS中一起编译,出现了如下四个同样的错误,
"cvsumpixels.cpp", line 201: error: identifier "alloca" is undefined
"cvsumpixels.cpp", line 202: error: identifier "alloca" is undefined
"cvsumpixels.cpp", line 203: error: identifier "alloca" is undefined
"cvsumpixels.cpp", line 204: error: identifier "alloca" is undefined
4 errors detected in the compilation of "cvsumpixels.cpp".
其对程序中四个地方
ICV_DEF_INTEGRAL_OP_C1( 8u32s, uchar, int, double, int, CV_NOP, CV_8TO32F_SQR )
ICV_DEF_INTEGRAL_OP_C1( 8u64f, uchar, double, double, int, CV_8TO32F, CV_8TO32F_SQR )
ICV_DEF_INTEGRAL_OP_C1( 32f64f, float, double, double, double, CV_NOP, CV_SQR )
ICV_DEF_INTEGRAL_OP_C1( 64f, double, double, double, double, CV_NOP, CV_SQR )
其中ICV_DEF_INTEGRAL_OP_C1定义如下
#define ICV_DEF_INTEGRAL_OP_C1( flavor, arrtype, sumtype, sqsumtype, worktype, \
cast_macro, cast_sqr_macro ) \
请各位高人指点如何解决??????
在调用cvresize时编译cvimgwarp.cpp,也出现了同样的错误:
错误定位于 buf = (float*)cvStackAlloc(buf_size);
在这里原来是cvstackalloc引起的,而它的定义在cvmasic.h中的
#define cvStackAlloc(size) cvAlignPtr( alloca((size) + CV_MALLOC_ALIGN), CV_MALLOC_ALIGN )
而在cvmasic.h中,编译alloca却没有错,
在网上找了这个
8.27 alloca() 是什么?为什么不提倡使用它?
在调用 alloca() 的函数返回的时候, 它分配的内存会自动释放。也就是说, 用 alloca 分配的内存在某种程度上局部于函数的 ``堆栈帧" 或上下文中。
alloca() 不具可移植性, 而且在没有传统堆栈的机器上很难实现。当它的返回值直接传入另一个函数时会带来问题, 如 fgets(alloca(100), 100, stdin)。
由于这些原因, alloca() 不合标准, 不宜使用在必须广泛移植的程序中, 不管它可能多么有用。 既然 C99 支持变长数组(VLA), 它可以用来更好的完成 alloca() 以前的任务。
不知道大家有什么好的解决方法,一起探讨一下!!!!!!!!!!!!!!!!!!! |
|