Приложение iOS 4 падает при запуске на iOS 3.1.3: Символ не найден: __NSConcreteStackBlock - программирование
Подтвердить что ты не робот

Приложение iOS 4 падает при запуске на iOS 3.1.3: Символ не найден: __NSConcreteStackBlock

Я запускаю Xcode 3.2.3 с iOS 4.0 SDK. Я создал свое приложение с базовым SDK = iphoneos4.0, активным SDK = iphoneos4.0, целью развертывания = 3.1.3 и архитектурой = стандартным (arm6 arm7). Компилятор = GCC 4.2. Насколько я понимаю, это правильный способ создания приложения для iOS 4 и 3.

Приложение отлично работает на устройствах под управлением iOS 4. Но при запуске он запускается при попытке запустить его на устройстве с iOS 3.1.3 (iPod Touch 1G):

dyld: Symbol not found: __NSConcreteStackBlock
  Referenced from: /var/mobile/Applications/192B30ED-16AC-431E-B0E9-67C1F41FD5DA/MyApp.app/MyApp
  Expected in: /usr/lib/libSystem.B.dylib

Похоже, что проблема связана с динамически связанной библиотекой "низкого уровня", прежде чем моя функция main() даже вызвана. Я даже попробовал перезапустить устройство и т.д., Не повезло. Здесь часть журнала сбоев:

Process:         MyApp [60]
Path:            /var/mobile/Applications/192B30ED-16AC-431E-B0E9-67C1F41FD5DA/MyApp.app/MyApp
Identifier:      MyApp
Version:         ??? (???)
Code Type:       ARM (Native)
Parent Process:  launchd [1]

Date/Time:       2010-07-22 17:16:17.942 -0400
OS Version:      iPhone OS 3.1.3 (7E18)
Report Version:  104

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x00000001, 0xe7ffdefe
Crashed Thread:  0

Dyld Error Message:
  Symbol not found: __NSConcreteStackBlock
  Referenced from: /var/mobile/Applications/192B30ED-16AC-431E-B0E9-67C1F41FD5DA/MyApp.app/MyApp
  Expected in: /usr/lib/libSystem.B.dylib
  Dyld Version: 149

Binary Images:
    0x1000 -    0x80fff +MyApp armv6  <d5f0ff6f233b4b034c222c16438c88d9> /var/mobile/Applications/192B30ED-16AC-431E-B0E9-67C1F41FD5DA/MyApp.app/MyApp
0x2fe00000 - 0x2fe26fff  dyld armv6  <544395a4b5546114b878d5131a84fd7f> /usr/lib/dyld
0x30410000 - 0x30536fff  libSystem.B.dylib armv6  <0373fd64e915a17160732b29d343f95f> /usr/lib/libSystem.B.dylib

Спасибо за любой совет!

4b9b3361

Ответ 1

Бен Готлиб вчера заметил, что если вы используете блоки в любом месте своего приложения, вы увидите крах, похожий на это, на ОС до 4.0 при создании с помощью компилятора LLVM. Чтобы обойти это, вы можете указать флаг компоновщика -weak-lSystem в настройках сборки Xcode.

Ответ 2

Поскольку большинство этих ответов относятся к Xcode 3.x, просто хотелось поделиться тем, что я сделал, чтобы исправить это с помощью Xcode 4.2.

Под вашей целью на вкладке "Сборка фаз" в разделе "Связывание с библиотеками" я добавил "libSystem.dylib" и сделал это необязательным. Это устранило проблемы iOS 3.x при сохранении поддержки устройств iOS 4.x и 5.0.

Ответ 3

Если вы используете библиотеки cocos2d, есть более чистый способ сделать это, вы должны настроить целевую цель развертывания cocos2d на 3.0