2016-05-16 6 views
0

Ich habe eine iOS-App, die liblzma verwenden. Ich bin derzeit in der Lage, Cross-Plattform-Kompilier-Skript erfolgreich zu kompilieren, um den Quellcode in einer A-Datei zu kompilieren, und das A mit Header in meinem Projekt zu verwenden.Kann ich C++ - Bibliothek in Dylib kompilieren und sie in iOS 9 Projekt verwenden?

Jetzt in iOS 8 und höher, Apple beginnen dynamische Verknüpfung zu unterstützen, so war ich neugierig zu sehen, ob ich liblzma.dylib in meinem Projekt statt liblzma.a verwenden kann. Aber ich habe versagt.

Hier ist, was ich getan habe:

  1. die Kompilierung Skript ändern, ich liblzma.a bisher verwendeten zu kompilieren. Ich änderte --disable-shared zu --enable-shared und benutzte dann lipo, um .dylib von jedem Bogen zu einer fetten .dylib zu kombinieren.

  2. entfernte ich die liblzma.a von meinem Projekt und fügte hinzu liblzma.dylib mein Projekt

  3. gebaut, Erfolg. Aber wenn auf dem Gerät läuft, traf ich die folgende Fehler

dyld: Bibliothek nicht geladen: /Volumes/Data/Developer/build/xz-5.2.2/build/iOS/arm64/lib/liblzma .5.dylib Referenziert von: /var/containers/Bundle/Application/AB7A063F-9C3F-4CEB-A757-965238947000/****.app/**** Grund: Inkompatible Bibliotheksversion: **** erforderlich Version 8.0.0 oder höher, aber liblzma.5.dylib bietet Version 6.0.0 (LLDB)

  1. ich benutzte Werkzeug ch eck die aktuelle Version des neu gebauten .dylib, ist das, was ich bekam

/Volumes/Data/Developer/build/xz-5.2.2/build/iOS/Universal/lib/liblzma.5 .dylib: /Volumes/Data/Developer/build/xz-5.2.2/build/iOS/x86_64/lib/liblzma.5.dylib (Kompatibilitätsversion 8.0.0, aktuelle Version 8.2.0) /usr/lib /libSystem.dylib (Kompatibilität Version 1.0.0, aktuelle Version 1226.10.1)

ich habe ein paar Fragen:

  • Kann ich Dylib so hinzufügen?
  • Wird liblzma.dylib tatsächlich auf mein iOS-Gerät kopiert, wenn ich die App starte?
  • Warum die Fehlermeldung sagte liblzma.5.dylib bietet Version 6.0.0 während otool zeigt aktuelle Version 8.2.0?
  • Ich weiß für iOS 8.0 + apps, um dylib zu verwenden, dass dylib auch signiert werden muss. Wie mache ich das?

Vielen Dank!

+0

versuchen Sie es auf Emulator bereits auf dem Gerät, die niedrigere Versionsnummer hat als

  • erforderlich ich ändern müssen Name des dylib installieren? Haben Sie überprüft, ob das Gerät bereits über die Bibliothek verfügt? Vielleicht wird Ihre Bibliothek nicht in das richtige Verzeichnis kopiert und deshalb wird der Standard vom iPhone verwendet? Haben Sie alle Instanzen von .a aus dem Projekt entfernt? Können Sie versuchen, es mit dem Debugger auszuführen, um zu sehen, was passiert? – Igor

    +0

    einige Dinge zu beachten: Sie benötigen eine universelle Architektur-Bibliothek, die x64 sowie ARM unterstützt. Ihre Version, die auf dem OSX kompiliert und verlinkt wurde, scheint "x86_64" zu sein und scheint mit dem Konflikt zu kollidieren, den Sie als "Universal" festlegen. Ich weiß nicht mehr, wie es gemacht wurde, aber ich weiß, dass es getan werden kann (ich habe es für ein Framework getan), aber Sie müssen die Cross-Kompilierung dafür manuell einstellen. Wird 'Lzma' nicht offiziell unterstützt? Von Ihren Fehlern scheint es, dass lldb eine andere Version der Bibliothek hat, während für iOS es noch ein anderer ist. –

    +0

    @Igor Running auf Emulator funktioniert auch nicht, der gleiche Fehler. Ich weiß nicht, ob das System die Bibliothek hat. Ja, ich glaube, ich habe alle Erscheinungen von .a entfernt. Ich laufe bereits mit dem Debugger, da kam die Fehlermeldung. – Automatic

    Antwort

    0

    Gelöst!

    • Ja, ich könnte wie laden dylib dass
    • Ich brauche Datei kopieren BUILD-Phase hinzufügen für die dylib
    • kopiert werden, wenn liblzma.dylib nicht kopiert wird, iOS eine liblzma.dylib zu verwenden scheint mit install_name_tool
    Verwandte Themen