在iPhone上奇怪的动态链接

时间:2009-08-21 19:31:16

标签: iphone xcode iphone-sdk-3.0 linker uint64

以下代码在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增强功能。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

如果你这样做的话。怪异

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