首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS:在64位中使用vDSP函数

iOS:在64位中使用vDSP函数
EN

Stack Overflow用户
提问于 2014-03-20 19:39:22
回答 1查看 602关注 0票数 0

在iOS中,我有一个函数调用,它依赖于苹果加速框架的成员vgathr

代码语言:javascript
复制
int pix = image.size.height * image.size.width;
float * array = (float *)malloc(sizeof(float) * pix * 4);
float * colorPlane = (float *)malloc(sizeof(float) * pix);
float * y_r = (float *)malloc(sizeof(float) * pix)
int * malloc(sizeof(int) * pix)

vDSP_vgathr(colorPlane, (const vDSP_Length *)idx, 1, y_r, 1, (int)(rate*pix));

我已经看到了这样的问题,它与我得到的错误、EXC_I386_GPFLT和64位系统以及非规范指针有关。我看到的解决方案 (和另一个)建议包括tgmath.h,但是当使用时(在编译成功的情况下),它什么也不做,而且我仍然得到了EXC_I386_GPFLT

我尝试过许多其他可能的解决方案,包括类型转换、各种对象和不同的函数调用。我如何使这个函数调用与64位架构一起工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-23 01:55:28

vDSP_vgathr的文档说它被定义为

代码语言:javascript
复制
void vDSP_vgathr (
   float *__vDSP_A,
   vDSP_Length *__vDSP_B,
   vDSP_Stride __vDSP_J,
   float *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

您将一个int传递到该函数中,vDSP_Length被定义为unsigned long.,因此,传递一个未签名的long in:

代码语言:javascript
复制
unsigned long * idxSend = (unsigned long *)malloc(sizeof(unsigned long) * N);
for (i=0; i<N; i++) idxSend[i] = (unsigned long)idx[i];
vDSP_vgathr(..., idxSend, ...);

这解决了你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22543428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档