- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试将 OpenCV 3.2.0 实现为 iOS 应用程序中的静态库。我在我的工作区内创建了一个 opencv.xcodeproj
项目来构建静态库,然后将其链接到我的主应用程序项目,如下所示:
由于类型转换错误,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/
我正在尝试将 OpenCV 3.2.0 实现为 iOS 应用程序中的静态库。我在我的工作区内创建了一个 opencv.xcodeproj 项目来构建静态库,然后将其链接到我的主应用程序项目,如下所示:
我是一名优秀的程序员,十分优秀!