web-dev-qa-db-de.com

Wie überprüfe ich, ob eine statische Bibliothek mit Bitcode erstellt wurde?

Ich habe eine statische Bibliothek, die von einer anderen Firma erstellt wurde. Ich möchte wissen, ob es sich um eine statische Bibliothek mit Bitcode handelt. Welcher Befehl kann ihn im Terminal erkennen?

32
xCocoa

Da es bereits in anderen Antworten geschrieben wurde,

otool -l yourlib.a | grep __LLVM

ist der Weg zu gehen.

Ein Apple-Ingenieur sagt mit

otool -l yourlib.a | grep bitcode

ist nicht zuverlässig .

Das Suchen nach einem "Bitcode" -Abschnitt ist keine zuverlässige Methode, um festzustellen, ob Ihre Dateien eingebetteten Bitcode enthalten. Wenn Sie das tun möchten, suchen Sie nach dem Segment "__LLVM". Sie sollten sich bewusst sein, dass ein normaler Build mit der Option -fembed-bitcode-marker eingebettete Bitcode-Abschnitte mit minimaler Größe ohne echten Inhalt erzeugt. Auf diese Weise können Sie die Bitcode-bezogenen Aspekte Ihres Builds testen, ohne den Build-Prozess zu verlangsamen. Der tatsächliche Bitcode-Inhalt wird beim Erstellen eines Archivs berücksichtigt.

Siehe auch die Kommentare von xCocoa .

Es scheint, dass otool den Bitcode nicht meldet, wenn Code für die Architektur des iPhone Simulators enthalten ist (x86_64 oder arm64).

Sie können die Architekturen der Bibliothek auflisten mit:

lipo -info yourlib.a

Dann können Sie für jede Architektur separat nach Bitcode suchen, z.

otool -Arch armv7 -l yourlib.a  | grep bitcode
otool -Arch arm64 -l yourlib.a  | grep bitcode
52
Oliver

Haftungsausschluss: Ich bin der Autor von LibEBC.

Sie können ebcutil verwenden, um festzustellen, ob ein Bitcode in einer Mach-O-Binärdatei oder -Bibliothek vorhanden ist. Sie können es sogar verwenden, um den eingebetteten Bitcode daraus zu extrahieren.

https://github.com/JDevlieghere/LibEBC

2
Jonas

Und wenn Sie überprüfen möchten, ob eine bestimmte Datei (yourFile.o) In der statischen Bibliothek ist Bitcode aktiviert. Sie können den 'staticLibrary.a' und benutze den gleichen otool Befehl. Allerdings erlaubt macOS nicht, Ihre staticLibrary.a zuweilen mit dem Standard-Extraktionsdienstprogramm zu extrahieren, und die meisten Tools von Drittanbietern funktionieren auch nicht.

Sie können diese Schritte ausführen, um bestimmte .o Dateien

  1. Holen Sie sich die Informationen über die Architektur

    lipo -info yourStaticLibrary.a
    

zB Ausgabe: armv7 arm64

  1. Extrakt yourStaticLibrary.a für eine oder beide der oben genannten Architekturen

    lipo yourStaticLibrary.a -thin armv7 -output yourStaticLibraryarmv7.a
    

(Geben Sie den Ausgabepfad an, in den Sie extrahieren möchten.)

  1. Du erhältst das 'yourStaticLibraryarmv7.a', das dann einfach mit dem Standard-Mac-Unarchiver extrahiert werden kann

  2. Beim Entpacken erhält man dann einen Ordner 'yourStaticLibraryarmv7' mit allen .o-Dateien

  3. otool -l yourFile.o | grep bitcode oder mit der spezifischen Architektur

    otool -Arch armv7 -l yourFile.o  | grep bitcode
    

Wenn die Datei Bitcode-fähig ist, wird in der Befehlszeile "Sektenname __Bitcode" angezeigt

1
Naishta

Es wird empfohlen, anhand von LLVM-Symbolen zu testen:

otool -l yourlib.a | grep LLVM

Du solltest ein paar Zeilen mit "__LLVM" bekommen

1
SeikoTheWiz