OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 8275|回复: 8

error: identifier "alloca" is undefined

[复制链接]
发表于 2009-4-14 14:56:29 | 显示全部楼层 |阅读模式
在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() 以前的任务。

不知道大家有什么好的解决方法,一起探讨一下!!!!!!!!!!!!!!!!!!!
回复

使用道具 举报

发表于 2009-4-18 22:38:34 | 显示全部楼层

error: identifier "alloca" is undefined

不是已经说了吗,用变长数组换掉就行了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-20 10:25:05 | 显示全部楼层

error: identifier "alloca" is undefined

对不起,上次我意断错误出在

#define cvStackAlloc(size) cvAlignPtr( alloca((size) + CV_MALLOC_ALIGN), CV_MALLOC_ALIGN )

对其进行修改时,还是报错,依然是: error: identifier "alloca" is undefined

我测试一下是否是此处引起的错误,直接把

#define cvStackAlloc(size) cvAlignPtr( alloca((size) + CV_MALLOC_ALIGN), CV_MALLOC_ALIGN )

给删了,再运行的时候,可是程序还是可以识别 cvStackAlloc()  这个函数,报错却丝毫没有变化,
觉得cvStackAlloc()可能在别处进行定义的,但是

搜索的结果却都是运用cvStackAlloc() ,在别处却没有定义,恳求能够再得到指点!!!!!!!!!!!
回复 支持 反对

使用道具 举报

发表于 2009-4-20 19:31:42 | 显示全部楼层

error: identifier "alloca" is undefined

rebuild all之后再看。
另外,你这个改法没有任何意义,一定要解决alloca的问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-20 19:51:54 | 显示全部楼层

error: identifier "alloca" is undefined

我知道没有什么意义,不能解决alloc这个错误,我只想定位错误到底在哪个地方,按你的说法,的删去

#define cvStackAlloc(size) cvAlignPtr( alloca((size) + CV_MALLOC_ALIGN), CV_MALLOC_ALIGN )

然后rubuild all,但是还是能识别 cvStackAlloc()这个函数,所以我才说不知道改哪个地方
回复 支持 反对

使用道具 举报

发表于 2009-4-21 17:18:14 | 显示全部楼层

error: identifier "alloca" is undefined

我知道没有什么意义,不能解决alloc这个错误,我只想定位错误到底在哪个地方,按你的说法,的删去

#define cvStackAlloc(size) cvAlignPtr( alloca((size) + CV_MALLOC_ALIGN), CV_MALLOC_ALIGN )

然后rubuild all,但是还是能识别 cvStackAlloc()这个函数,所以我才说不知道改哪个地方

不要用cvStackAlloc.

内存就是一个malloc, 一个free, 不要搞得太花哨.
不支持的地方全部用cvAlloc/cvFree替换实现.
回复 支持 反对

使用道具 举报

发表于 2009-4-21 20:32:28 | 显示全部楼层

error: identifier "alloca" is undefined

我按照chai2010的方法改了,但是还是出现error: identifier "alloca" is undefined。这次错误是在:"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 )
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-22 08:32:35 | 显示全部楼层

error: identifier "alloca" is undefined

多谢指点,

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 )

这个错误解决了,也是cvStackAlloc()引起的
回复 支持 反对

使用道具 举报

发表于 2011-6-14 21:30:27 | 显示全部楼层

error: identifier "alloca" is undefined

今天整cvmatmul.c,遇到了问题,搜到这了。在dsp上,还是要用cvalloc和cvfree来代替cvStackAlloc。其中local_alloc=0表示用的cvAlloc,需要调用cvFree,否则是用的cvStackAlloc,把这部分注释掉就可以了。

不考虑运行速度啊。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-4-29 08:46 , Processed in 0.011330 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表