1

我试图让我的应用程序在 2.2.1 设备上运行,尽管它是针对 3.1.2 SDK 构建的。

下表列出了我的结果

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 转换为浮点数或双精度时出现问题。我猜 u64 转换代码已经改变了?因此,仅当您运行的操作系统版本与 sdk 不匹配时,它才会失败。

无论如何,解决方法是将 u64 转换为无符号整数,然后转换为浮点数。当然,我只能这样做,因为我处于所讨论的数字始终可以放入常规整数的情况。

于 2010-01-15T17:20:04.467 回答