2011-10-27 54 views
3

由於此NSConcreteBlock錯誤,我的應用程序在3.1.3上崩潰。我讀the other post on this topic,答案是弱鏈接libSystem.B.dylib。iOS 3.1應用程序在3.1.3上啓動時崩潰:未找到符號:__NSConcreteStackBlock

但是,我並沒有在我的應用程序中包含該庫,而且我仍然遇到同樣的問題。

還有什麼可能導致這次崩潰?

這裏是日誌:

代碼類型:ARM(母語) 父進程:launchd會1

日期/時間:2011-10-20 14:05:08.189 -0700 OS版本: iPhone OS 3.1.3(7E18) 報告版本:104

異常類型:EXC_BREAKPOINT(SIGTRAP) 異常代碼:00000001,0xe7ffdefe 崩潰螺紋:0

dyld的錯誤消息: 找不到符號:__NSConcreteStackBlock 預期:/usr/lib/libSystem.B.dylib dyld的版本:149

回答

3

不過,我不包括在我的應用程序,庫所有,而我仍然得到同樣的錯誤。

除了libSystem沒有轉義,因爲它實現了標準C運行時庫等。無論何時編譯Objective-C程序,編譯器都會自動鏈接libSystem。而且,如果您通過otool -L檢查諸如UIKit或Foundation等系統框架,則會發現它們也與libSystem鏈接。

這意味着Bard Larson在this answer中描述的解決方案也適用於您。

1

塊是iOS 4.0引入了一個Objective-C語言特性 - 它會從不在iOS 3.x上工作。

+0

我不在任何地方在我的代碼中使用塊。 –

1

你可能已經看到了這一點,但它仍然是值得一試:http://longweekendmobile.com/2011/03/15/the-backwards-compatibility-blues-supporting-ios-3-1-4-2/

在那裏,他們說,即使你沒有在你的代碼中使用的塊中,libSystem中引用它們,那麼弱鏈接libSystem中應該也行爲你。

+0

我根本沒有鏈接libSystem庫。我應該鏈接它,然後弱連接它?我曾經以爲你只是很弱 - 如果你已經鏈接了它 - 我錯了嗎?有沒有某種非顯式的鏈接,我會重寫? –

+0

@AndrewJohnson它似乎是libSystem.B.dylib自動鏈接,即使它不是由項目直接鏈接。你不需要鏈接它,你只需要使用'-weak-lSystem'標誌。 – ThomasW

-1

在構建設置下確保您的C/C++編譯器版本是LLVM GCC而不是GCC。

-1

您可能沒有使用任何基於塊的方法,但是您可能正在使用某些方法正在使用一些現在在內部使用基於塊的方法的UIKit方法。您可能需要檢查以下內容:

  1. 檢查您的「生成設置」中的部署目標是否設置爲3.1.3。
  2. 您是否有可能使用iOS4或5中的任何新的或更新的方法?即現在可以在後臺調用/執行塊的方法

正如其他人所說的,也許你可能會將libSystem庫作爲最後的手段弱連接。

好運