46 votes

L'application iOS 4 se bloque au démarrage sur iOS 3.1.3: Symbole introuvable: __NSConcreteStackBlock

Je suis sous Xcode 3.2.3 avec le SDK iOS 4.0. J'ai construit mon application avec Base SDK = iphoneos4.0, Active SDK = iphoneos4.0, le Déploiement Target = 3.1.3, et l'Architecture = standard (arm6 arm7). Compilateur = GCC 4.2. Si je comprends bien, ce est la bonne façon de construire une application pour iOS 4 et 3.

L'application fonctionne très bien sur les appareils équipés d'iOS 4. Mais il bloque au démarrage lorsque vous essayez de l'exécuter sur un appareil avec iOS 3.1.3 (un 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

Il semble être un problème assez "bas niveau" liées de manière dynamique de la bibliothèque, AVANT que ma fonction main() obtient même appelé. J'ai même essayé de re-démarrage de l'appareil, etc., avec pas de chance. Voici une partie de la la de crash:

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

Merci pour les conseils!!!

85voto

Brad Larson Points 122629

Ben Gottlieb a souligné hier que si vous utilisiez des blocs n'importe où dans votre application, un crash similaire à celui-ci se produirait sur un système d'exploitation antérieur à la version 4.0 lors de la compilation avec le compilateur LLVM. Pour contourner ce problème, vous pouvez spécifier l'indicateur d'éditeur de liens -weak-lSystem dans vos paramètres de construction Xcode.

18voto

Brandon Points 885

Comme la plupart de ces réponses sont spécifiques à Xcode 3.x, je voulais simplement partager ce que j'ai fait pour résoudre ce problème avec Xcode 4.2.

Sous votre cible, dans l'onglet "Build Phases" de la section "Link Binary With Libraries", j'ai ajouté "libSystem.dylib" et je l'ai rendu facultatif. Cela corrigeait le problème des appareils iOS 3.x tout en maintenant la prise en charge des appareils iOS 4.x et 5.0.

1voto

John Franklin Points 3979

Utilisez-vous des blocs pour quoi que ce soit? Essayez de convertir le bloc en une méthode régulière.

1voto

nobre Points 2019

Si vous utilisez les bibliothèques cocos2d, il existe un moyen plus simple de le faire. Vous devez configurer la cible de déploiement de la cible cocos2d sur 3.0.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X