1

3.1.2 SDK に対してビルドされているにもかかわらず、2.2.1 デバイスでアプリを実行しようとしています。

下の表に私の結果を示します

Deployment   |Base        |Device      |Result
Target       |SDK         |Version     |
-------------+------------+------------+-------
3.1.2         3.1.2        3.1.2        Runs OK
2.2.1         3.1.2        3.1.2        Runs OK
2.2.1         2.2.1        2.2.1        Runs OK
2.2.1         3.1.2        2.2.1        Builds OK, interrupt signal when run

3 行目は、SDK 間で互換性のないコードがないことを証明しています。問題の根源を突き止めるために、弱いリンクにする必要があるすべてのものを取り出しました。

割り込みは、プログラムの開始後すぐに発生しますが、すぐには発生しません。そして、それが起こるポイントは、3.0 の機能とはまったく関係のないコードにあります。

停止している行は、4 つの浮動小数点 (ab)/(c/d) を含む単純な数学演算であり、それらのいずれにも問題はないようです。(これは C++ です)

これらの状況で他に何が割り込み信号を引き起こす可能性がありますか?

アップデート:

中断している正確なポイントは、u64 をフロートにキャストしているようです。

4

1 に答える 1

0

最終的に起こったことは、このアプリをこの構成で実行すると、u64 を float または double にキャストする際に突然問題が発生することです。u64のキャストコードが変わったのかな?そのため、SDK と一致しないバージョンの OS を実行している場合にのみ失敗します。

とにかく回避策は、u64 を unsigned int にキャストしてから float にキャストすることです。もちろん、問題の数値が常に通常の int に収まる状況にあるため、それしかできません。

于 2010-01-15T17:20:04.467 に答える