0

以下代码在 Xcode 创建的模板项目中崩溃。

int main(int argc, char *argv[]) 
{
    uint64_t t64 = 100000;
    double s = (double)t64; // Crash!
    ...

崩溃伴随着以下控制台输出,发生在 2.2.1 设备上,但不在 3.0.1 设备上。它在为 Thumb 或 ARM 编译时都会发生。

dyld: lazy symbol binding failed: Symbol not found: ___floatundidf
Referenced from: /var/mobile/Applications/15E9DC65-324D-4C3A-8477-DC8CFFA67DC1/MyApp.app/MyApp
Expected in: /usr/lib/libgcc_s.1.dylib

dyld: Symbol not found: ___floatundidf
Referenced from: /var/mobile/Applications/15E9DC65-324D-4C3A-8477-DC8CFFA67DC1/MyApp.app/MyApp
Expected in: /usr/lib/libgcc_s.1.dylib

该问题仅发生在 3.0 的 Base SDK 中,为 2.2.1 编译就可以了。不幸的是,我有 3.0 的增强功能。

4

2 回答 2

0

当您说它适用于一个 iPhone 项目而不适用于另一个时,您是在用不同的设置编译相同的代码吗?如果是这样,我会检查两者之间的设置有何不同,以阐明问题的根源。

___floatundidf应该是其中的一部分,libgcc因此它可能在 2.2.1 SDK 的该库的 ARM 版本中丢失,但在 3.0.1 中存在(因此前者崩溃但后者不崩溃)。您可以使用该nm工具来检查它在两者中是否存在。如果 2.2.1 中缺少它,您应该向 Apple 提交错误。

于 2009-08-21T20:34:15.580 回答
0

如果你这样做,它会起作用。诡异的

   int main(int argc, char *argv[]) {
    uint64_t t64 = 100000;
    double s = (double)(uint64_t)t64; // Crash!
    ...
于 2009-10-07T23:10:48.860 回答