OpenCV 3.2.0をiOSアプリケーションの静的ライブラリとして実装しようとしています。OpenCV 3.2.0 iOSタイプ変換:intから__CLPK_integer *
ファイルhal_internal.cpp
をopencv_core
にコンパイルされません。私はそのようにように、私のメインのアプリのプロジェクトにリンクする静的ライブラリを構築するために私のワークスペース内opencv.xcodeproj
プロジェクトを作成しました型変換エラーが原因です。これは短く、問題のあるコードのサンプルである:
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);
}
}
}
int
あるm
パラメータは、タイプ__CLPK_integer
ではないので、コンパイラエラーがNo matching function for call to sgesv_
です。
これは、関数のシグネチャである:私はバッファを作成して、代わりにそれを使用しようとする
#if defined(__LP64__) /* In LP64 match sizes with the 32 bit ABI */
typedef int __CLPK_integer;
...
#else
typedef long int __CLPK_integer;
...
#endif
:
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
は、次のように加速枠組みの中clapack.h
で定義されている
__CLPK_integer newM = m;
...
sgesv_(&newM, &n, (float*)a, &lda, piv, (float*)b, &m, info);
同じコンパイラエラーが発生します。
私は、コンパイラがnewM
宣言で機能sgesv_
が、問題のエラーを見つけることができます
__CLPK_integer* newM = (int*)m;
...
sgesv_(newM, &n, (float*)a, &lda, piv, (float*)b, &m, info);
をしようとした場合:
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
を「はい」に設定しています。
int m
を予想されるタイプに変換する方法__CLPK_integer *
?
ありがとうございます!
をキャストする必要があるかもしれませんトムありがとうございます。新鮮な目の力を絶対に過小評価しないでください。 実際にすべてのパラメータをキャストする必要がありました。その呼び出しは次のようになります。 sgesv_( \t \t \t \t \t(__CLPK_integer *)&M、 \t \t \t \t \t(__CLPK_integer *)&N、 \t \t \t \t \t(フロート*)A、 \t \t \t \t \t(__CLPK_integer *)< \t \t \t \t \t PIV、 \t \t \t \t \t(フロート*)B、\t \t \t \t \t (__CLPK_integer *)&M、\t \t \t \t \t (__CLPK_integer *)&インフォメーション \t \t \t \t \t)。 – Erwin