2009-08-21 65 views
0

以下代碼在Xcode創建的模板項目中崩潰。iPhone上奇怪的動態鏈接

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的基礎SDK,編譯爲2.2.1是好的。不幸的是我有3.0的增強。

回答

0

當你說它適用於一個iPhone項目而不是另一個項目時,你是用不同的設置編譯相同的代碼嗎?如果是這樣,我會檢查兩者之間的不同設置,以闡明問題的根源。

___floatundidf應該是libgcc的一部分,因此它可能在2.2.1 SDK的ARM庫版本中丟失,但存在於3.0.1中(因此前者崩潰而後者不崩潰)。您可以使用nm工具來檢查它們是否存在。如果它缺少2.2.1,則應該向Apple提交一個錯誤。

+0

感謝您的答覆 - 非常感謝。 是的,這絕對適用於一個項目,但不是另一個,所以其含義是項目設置。我想我必須逐行瀏覽項目文件。 – Robin 2009-08-22 07:39:53

+0

我編輯了這個問題,因爲問題與定位不同的固件版本直接相關,畢竟不是項目特定的。 – Robin 2009-08-23 09:35:40

0

它的工作原理,如果你這樣做。奇怪的

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