gpt4 book ai didi

c++ - OpenCV 3.2.0 iOS 类型转换 : int to __CLPK_integer *

转载 作者:太空宇宙 更新时间:2023-11-03 22:46:44 24 4
gpt4 key购买 nike

我正在尝试将 OpenCV 3.2.0 实现为 iOS 应用程序中的静态库。我在我的工作区内创建了一个 opencv.xcodeproj 项目来构建静态库,然后将其链接到我的主应用程序项目,如下所示:

workspace structure

static library linking

由于类型转换错误,opencv_core 中的文件 hal_internal.cpp 将无法编译。这是问题代码的示例,已缩短:

lapack_LU(fptype* a, size_t a_step, int m, fptype* b, size_t b_step, int n, int* info)
{
int lda = (int)(a_step / sizeof(fptype)), sign = 0;
int* piv = new int[m];

transpose_square_inplace(a, lda, m);

if(b)
{
if(n == 1 && b_step == sizeof(fptype))
{
if(typeid(fptype) == typeid(float))
sgesv_(&m, &n, (float*)a, &lda, piv, (float*)b, &m, info);
}
}
}

编译器错误是 No matching function for call to sgesv_ 因为 m 参数,它是 int 不是 类型>__CLPK_integer

这是函数签名:

int sgesv_(__CLPK_integer *__n, __CLPK_integer *__nrhs, __CLPK_real *__a,
__CLPK_integer *__lda, __CLPK_integer *__ipiv, __CLPK_real *__b,
__CLPK_integer *__ldb,
__CLPK_integer *__info) __OSX_AVAILABLE_STARTING(__MAC_10_2,
__IPHONE_4_0);

__CLPK_integer 在 Accelerate 框架的 clapack.h 中定义为:

#if defined(__LP64__) /* In LP64 match sizes with the 32 bit ABI */
typedef int __CLPK_integer;
...
#else
typedef long int __CLPK_integer;
...
#endif

如果我尝试创建一个缓冲区并改为使用它:

__CLPK_integer newM = m;

...

sgesv_(&newM, &n, (float*)a, &lda, piv, (float*)b, &m, info);

我得到了同样的编译器错误。

如果我尝试

__CLPK_integer* newM = (int*)m;

...

sgesv_(newM, &n, (float*)a, &lda, piv, (float*)b, &m, info);

编译器可以找到函数 sgesv_ 但在 newM 声明处出现错误:

Cannot initialize a variable of type '__CLPK_integer *' (aka 'long *') with an rvalue of type 'int *'

此外,为什么编译器认为 __CLPK_integer 现在是 aka 'long *'

如果我改为尝试转换 __CLPK_integer* newM = (long*)m; 我会得到同样的错误,但编译器认为 __CLPK_integer 是 aka 'int *' .

我正在针对 Generic iOS Device 进行构建,并将 Build Active Architecture Only 设置为 Yes。

如何将 int m 转换为预期类型 __CLPK_integer *

谢谢!

最佳答案

&m 正在传入两个参数,第一个和第七个。

看起来像这样的东西应该工作:

sgesv_((__CLPK_integer*)&m, &n, (float*)a, &lda, piv, (float*)b,(__CLPK_integer*)&m, info);

您可能还需要转换参数 2、4、5 和 8。

关于c++ - OpenCV 3.2.0 iOS 类型转换 : int to __CLPK_integer *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45874520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com