Das OS X-Programm läuft auf der Dev-Maschine und stürzt auf andere ab

8

Ich habe einen OS X 10.6 Mac, den ich als meine Dev-Maschine benutze. Das Programm, das ich geschrieben habe, funktioniert perfekt auf der Dev-Maschine. Jedoch, wenn ich versuchte, es auf einem OS X 10.5 (nicht sicher, ob das relevant ist) Testmaschine zu starten, stürzt es beim Start ab.

Dies ist der Fehler, den ich bekomme:

%Vor%

Es sieht so aus, als würde es abstürzen, weil es eine inkompatible Version der dynamischen Bibliothek libstdc ++ lädt. Ist diese Art von Ding gewöhnlich? Eine Suche bei Google offenbart nicht wirklich viele andere Programme, die dieses Problem haben. Was sollte ich in meinem Kompilieren tun, um dies zu verhindern? Muss ich irgendwie libstdc ++ innerhalb meines Anwendungspakets enthalten?

    
Nantucket 14.08.2010, 15:46
quelle

3 Antworten

9

Die Lösung für dieses Problem besteht darin, einer Ihrer Quelldateien den folgenden Code hinzuzufügen:

%Vor%

Das zugrunde liegende Problem ist, dass es mehrere Vorlagen gibt, die als externe Vorlagen in libstdc ++ - Headern deklariert sind, und während ihre Instanziierungen von libstdc ++ am 10.6. bereitgestellt werden, werden sie von libstdc ++ in 10.5 nicht bereitgestellt. Wenn Sie diese Vorlagen verwenden, werden Sie daher erfolgreich mit dem 10.6-SDK für Funktionen verbunden, die nicht vom Betriebssystem 10.5 bereitgestellt werden. Indem Sie die Instanziierungen selbst bereitstellen, stellen Sie sicher, dass Ihr Code auf Snow Leopard geladen wird.

Alternativ können Sie

%Vor%

in Ihrer Präfixdatei, aber dadurch wird der Vorlagencode aufgebläht.

    
Ben Artin 12.09.2011, 20:39
quelle
2

Es gibt ein paar Punkte, die ich mir vorstellen kann:

  1. Haben Sie es als "release build" kompiliert? Der Debug-Build wird möglicherweise nicht auf anderen Computern als der, auf der er kompiliert wurde, ausgeführt.

  2. Welches SDK hast du benutzt? Welche minimale Betriebssystemversion haben Sie in den Build-Einstellungen angegeben? Wenn Sie es unter 10.5 ausführen möchten, müssen Sie 10.5 SDK verwenden und / oder das Zielbetriebssystem auf 10.5 setzen. Siehe hierzu Apple-Dokument zum Erstellen mehrerer Betriebssystemversionen.

  3. Wurde auf dem Zielrechner DYLD_LIBRARY_PATH auf etwas nichtleeres gesetzt? Wenn dies nicht sorgfältig durchgeführt wird, kann dies dyld verwirren.

Eine Möglichkeit, verschiedene Möglichkeiten zu unterscheiden, besteht darin, Ihre App auf dem Dev-Computer auszuführen, jedoch mit einem separaten Konto ohne Administratorrechte vom Dev-Konto. dann können Sie testen, ob es in einer 10.6-Box läuft.

    
Yuji 14.08.2010 17:45
quelle
0

Ich stieß auf das gleiche Problem (die Erstellung mit GCC 4.2 macht meinen Code unter OS X 10.5 aufgrund von Fehlern in libstdc ++ 6.dylib nicht ausführbar).

Die von Ben Artin vorgeschlagene Lösung funktioniert. Alternativ können Sie das define _GLIBCXX_EXTERN_TEMPLATE auf Null setzen, bevor Sie Header hinzufügen (wenn Sie vorkompilierte Header verwenden, vergewissern Sie sich, dass sie mit dem define-Set korrekt kompiliert wurden).

    
jonas echterhoff 13.09.2011 08:55
quelle

Tags und Links