Ich habe eine Unix-Befehlszeilen-App (mit großem, bösen Makefile), die ich auf einem Mac ausführen möchte. Ich kompiliere es auf einem 10.6-System, natürlich mit allen geeigneten Bibliotheken. Die Implementierungsumgebung ist ein 10.5-System ohne zusätzliche Bibliotheken.
Ich kompilierte ohne -dynamic, und es scheint, statische Bibliotheken korrekt zu haben. Wenn ich es auf dem 10.6-System laufe, funktioniert es. Wenn ich es jedoch auf dem 10.5-System ausführe, bekomme ich:
dyld: unbekannter erforderlicher Ladebefehl 0x80000022
Ich habe den gleichen Fehler bekommen, als ich Dinge für das 10.6-System mit 10.5 xcode kompiliert habe, so dass es aussieht, als ob ein Versionsfehlertyp-Problem aufgetreten wäre. Allerdings habe ich gcc-4.0 und
verwendet$ CFLAGS = -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min = 10.5
so sollte es für 10.5 eingerichtet werden ... irgendwelche Ideen?
Danke
Bearbeiten einer uralten Frage:
Ich habe genau das gleiche Problem auf einem anderen Computer. Diesmal bin ich bei 10.5.8, vollständig update, das selbe Programm läuft noch auf 10.6.
Hat jemand in den Monaten, seit ich das gefragt habe, etwas Glück gehabt?
Der Grund für die dyld 0×80000022
Fehler kann sein, dass Sie eine Verknüpfung auf OS X 10.6
und OS X 10.6
einen Ladebefehl ( LC_DYLD_INFO_ONLY = 0×80000022
) verwenden, das OS X 10.5
tut < em> nicht verstehen.
Um dies zu beheben, vergewissern Sie sich, dass Sie ein Implementierungsziel verwenden, indem Sie die Umgebungsvariable direkt vor dem Verknüpfungsbefehl setzen:
%Vor% (oder setenv MACOSX_DEPLOYMENT_TARGET=10.5
)
Sie können immer überprüfen, ob Ihre ausführbare Datei den richtigen Ladebefehl wie folgt verwendet:
%Vor% Es wird entweder LC_DYLD_INFO_ONLY
(ohne Deployment-Ziel) -Befehle oder LC_DYLD_INFO
(mit Deployment-Ziel) angezeigt.
Ich habe nach dem gleichen Problem gesucht, wie ich auf 10.6 entwickle, muss aber eine Version haben, die auf 10.5 funktioniert. Zusätzlich zu den obigen Compiler-Flags sollten Sie hinzufügen:
-no_compact_linkedit
Es wird hier beschrieben:
wo es heißt:
In der Regel wird der Linker, wenn er auf Mac OS X 10.6 abzielt, kompakte Informationen im __LINKEDIT-Segment generieren. Diese Option bewirkt, dass der Linker stattdessen traditionelle Verlagerungsinformationen erstellt.
Ich kam aus einer Diskussion auf der Mailingliste xcode-users über "unbekanntes erforderliches Ladekommando 0x80000022".
Je nachdem, wie viele Bibliotheken Sie verwenden, ist es möglicherweise schwierig, alle diese Bibliotheken statisch zu verknüpfen. Was sagt Ihnen "otool -L your_binary"?
Um ein eigenständiges Paket für eine eigene Anwendung zu erhalten, habe ich eine benutzerdefinierte MacPorts-Installation in einem nicht standardmäßigen Verzeichnis vorgenommen, so dass ich mit den Bibliotheken aus diesem Verzeichnis dynlinkieren und nur die Leute fragen konnte um das ganze Ding an den gleichen Ort auf ihren Computern zu installieren. Nicht großartig, nicht der Mac-Geist überhaupt, aber es ist eine Unix-App, und Sie müssen mit Unix vertraut sein, um es trotzdem zu benutzen.
Viel Glück
Pascal
Es stellt sich heraus, dass es eine dynamische Bibliotheksladefunktion (0x22) gibt, die bei 10.5.6 hinzugefügt wurde. Das System, auf dem ich lief, war 10.5.5. Ich habe ein Upgrade auf 10.5.8 durchgeführt und alles läuft!
Ok, ZWEITE Lösung, und nicht sehr befriedigend, ist einen 10.5.8 Computer zu finden, die Entwicklerpakete zu installieren und neu zu kompilieren ... gleich für PowerPC ... traurig, aber es wird funktionieren ...
>Tags und Links macos static-libraries