Statische Bibliotheken im versionsübergreifenden Programm

8

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?

    
Brian Postow 17.09.2009, 18:11
quelle

6 Antworten

3

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.

    
greymfm76 20.10.2011 12:34
quelle
2

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".

    
todbot 15.06.2010 22:15
quelle
1

Ich konnte dies lösen, indem ich -mmacosx-version-min=10.5 an den Linker weitergab, z. --extra-ldflags="-mmacosx-version-min=10.5" wurde an configure für ffmpeg übergeben, das ich gemeinsam erstellt habe. Weitere Informationen: Ссылка

    
njahnke 01.08.2011 02:55
quelle
0

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

    
Pascal Cuoq 17.09.2009 20:47
quelle
0

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!

    
Brian Postow 17.09.2009 21:15
quelle
0

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 ...

>     
Brian Postow 10.06.2010 20:30
quelle

Tags und Links