8
votes

Le programme OS X fonctionne sur Dev Machine, écrasant horriblement sur les autres

J'ai un système d'exploitation x 10.6 Mac J'utilise comme ma machine de développement. Le programme que j'ai écrit fonctionne parfaitement sur la machine DEV. Cependant, lorsque j'ai essayé de l'exécuter sur un système d'exploitation X 10.5 (pas sûr de si cela est pertinent) Machine de test, il se bloque sur le lancement.

C'est l'erreur que je reçois: p>

Process:         MyApp[25908]
Path:            /Applications/MyApp.app/Contents/MacOS/MyApp
Identifier:      MyApp
Version:         ??? (???)
Code Type:       X86 (Native)
Parent Process:  launchd [109]

Interval Since Last Report:          17392106 sec
Crashes Since Last Report:           735
Per-App Interval Since Last Report:  0 sec
Per-App Crashes Since Last Report:   8

Date/Time:       2010-08-14 07:50:09.768 -0700
OS Version:      Mac OS X 10.5.8 (9L31a)
Report Version:  6
Anonymous UUID:  1BF30470-ACF2-46C7-B6D5-4514380965C8

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000
Crashed Thread:  0

Dyld Error Message:
  Symbol not found: __ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i
  Referenced from: /Applications/MyApp.app/Contents/MacOS/MyApp
  Expected in: /usr/lib/libstdc++.6.dylib


0 commentaires

3 Réponses :


2
votes

Il y a quelques points que je peux penser:

  1. Avez-vous compilé comme une "version de version"? La construction de débogage pourrait ne pas fonctionner sur des machines autres que celle dans laquelle elle est compilée.

  2. Quel SDK avez-vous utilisé? Quelle version minimale d'OS avez-vous spécifié dans les paramètres de construction? Si vous souhaitez l'exécuter sur 10.5, vous devez utiliser 10,5 sdk et / ou définir le système d'exploitation cible à 10,5. Voir Ce document Apple sur la construction de plusieurs versions de système d'exploitation.

  3. La machine cible a-t-elle eu dyld_library_path défini sur quelque chose de non vide? Si non fait avec soin, cela pourrait confondre dyld .

    Un moyen de distinguer diverses possibilités consiste à exécuter votre application dans la machine DEV, mais avec un compte séparé sans privilège d'administrateur du compte DEV; Ensuite, vous pouvez tester si elle fonctionne dans une boîte de 10,6.


1 commentaires

Re votre point 1: Si la construction de débogage est destinée à une architecture compatible (par exemple, vous n'essayez pas d'exécuter un code Intel sur une machine PowerPC) et n'utilise pas Zerolink (que je ne pense pas est même disponible sur le dernier Xcode ) Ensuite, la construction de débogage devrait fonctionner.



9
votes

La solution à ce problème consiste à ajouter le code suivant à l'un de vos fichiers source: xxx pré>

Le problème sous-jacent est qu'il existe plusieurs modèles déclarés comme des modèles externes dans les en-têtes LIBSTDC ++ , et bien que leurs instanciations soient fournies par LibstDC ++ sur 10.6+, elles ne sont pas fournies par LibstDC ++ sur 10.5. En conséquence, lorsque vous utilisez ces modèles, vous entendez avec succès la liaison avec succès contre le 10.6 SDK pour des fonctions non fournies par le système d'exploitation 10.5, et donc DYLD Craps sur le lancement. En fournissant les instanciations vous-même, vous vous assurez que votre code se charge sur Snow Leopard. P>

alternativez, vous pouvez P>

#define _GLIBCXX_EXTERN_TEMPLATE 0 


1 commentaires

Notez que vous devrez inclure pour le code ci-dessus pour fonctionner.



0
votes

J'ai rencontré dans le même problème (le bâtiment avec GCC 4.2 rend mon code Impossible d'exécuter sur OS X 10.5 en raison des erreurs DYLD dans LIBSTDC ++. 6.DYLIB).

La solution proposée par Ben Artin fonctionne. Sinon, vous pouvez définir la définition _glibcxx_extern_template sur zéro avant d'ajouter des en-têtes (si vous utilisez des en-têtes précompilés, assurez-vous qu'ils sont compilés avec le jeu de définition correctement).


0 commentaires