Приложение iOS 4 падает при запуске на iOS 3.1.3: символ не найден: __NSConcreteStackBlock - PullRequest
46 голосов
/ 23 июля 2010

Я использую Xcode 3.2.3 с iOS 4.0 SDK.Я создал свое приложение с Base SDK = iphoneos4.0, Active SDK = iphoneos4.0, Deployment Target = 3.1.3 и Architecture = standard (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

Кажется, это проблема с довольно «низкоуровневой» динамически связанной библиотекой, ДО моей основной) функция даже вызывается.Я даже попытался перезапустить устройство и т. Д., Но не повезло.Вот часть журнала аварий:

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

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

Ответы [ 3 ]

85 голосов
/ 23 июля 2010

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

18 голосов
/ 02 ноября 2011

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

Под вашей целью на вкладке "Build Phases" в "LinkРаздел Binary With Libraries »я добавил« libSystem.dylib »и сделал его необязательным.Это решило проблему устройств iOS 3.x при сохранении поддержки устройств iOS 4.x и 5.0.

1 голос
/ 30 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...