2015-09-24 15 views

Odpowiedz

0

Zaleca się testowanie z symbolami LLVM:

otool -l yourlib.a | grep LLVM

Powinieneś dostać kilka linii z "__LLVM"

+1

Próbuję go, ale niczego nie znalazłem, yourlib.a zawiera kod bitu, jestem pewien. – xCocoa

+0

Czy tworzyłeś archiwum? – SeikoTheWiz

+0

Czy możesz podać źródło swojego roszczenia? Dlaczego powinienem grep dla 'LLVM'? – Paul

29

Jak zostało napisane w innych alread odpowiedzi,

otool -l yourlib.a | grep bitcode 

lub

otool -l yourlib.a | grep __LLVM 

jest droga.

Ale w moim przypadku (XCode 7, statyczna biblioteka iOS) to nie działało (patrz także komentarze przez xCocoa).

Wygląda na to, że otool nie zgłasza bitu, jeśli dołączono kod architektury iPhone Simulator (x86_64 lub arm64).

Można wymienić architektur lib jest z:

lipo -info yourlib.a 

Następnie można sprawdzić bitcode dla każdej architektury oddzielnie, np:

otool -arch armv7 -l yourlib.a | grep bitcode 
otool -arch arm64 -l yourlib.a | grep bitcode 
+0

Czy jest prawidłowe: jeśli biblioteka statyczna nie została skompilowana z 'ENABLE_BITCODE = NO', to nie może być używana z elementu docelowego, który ma" ENABLE_BITCODE = YES "? Czy jest też przeciwnie? –

+1

@EugeneDubinin Bitcode to tylko kilka dodatkowych informacji, więc nie ma nic złego poza nieznacznie zwiększonym rozmiarem. Jednak brak bitu w pliku binarnym oznacza, że ​​nie można go połączyć z celem, który wymaga kodu bitcodowego (tzn. Włączony jest kod bitcodowy). – Mazyod

+0

Należy pamiętać, że jeśli kompilujesz z '' -fembed-bitcode-marker', a nie '-fembed-bitcode' (sprawdzaj dane wyjściowe kompilatora), możesz uzyskać fałszywe pozytywne z tymi poleceniami, ponieważ obecny jest" znacznik "bitu, po prostu nie faktyczny bitcod. [Ta odpowiedź] (https://stackoverflow.com/a/34965178/72176) ma więcej informacji na ten temat. –

3

Oświadczenie: Jestem autorem LibEBC.

Możesz użyć numeru ebcutil, aby sprawdzić, czy w binarnie lub bibliotece Mach-O występuje kod. Możesz nawet użyć go do wyodrębnienia z niego osadzonego bitcodu.

https://github.com/JDevlieghere/LibEBC

+0

Próbowałem korzystać z biblioteki, ale na najnowszym systemie MacOS, nie wydaje się, aby w ogóle się kompilować. – jarora

+0

Zapraszam do otwarcia wydania na GitHub. – Jonas

+0

https://github.com/JDevlieghere/LibEBC/issues/5 – jarora

1

A jeśli chcesz sprawdzić, czy dany plik (yourFile.o) w bibliotece statycznych jest bitcode włączona, można wyodrębnić 'staticLibrary.a' i użyć tego samego polecenia otool. Jednak macOS nie pozwala na wyodrębnienie pliku staticLibrary.a czasami za pomocą domyślnego narzędzia wyodrębniania, a większość narzędzi innych firm również nie działa.

Możesz śledzić kroki, aby sprawdzić konkretne .o plików

  1. uzyskać informacje o architekturze

    lipo -info yourStaticLibrary.

np Wydajność: ARMv7 arm64

  1. Ekstrakt yourStaticLibrary.a na jeden lub oba z powyższej architekturze

    lipo yourStaticLibrary.a -thin ARMv7 -Output yourStaticLibraryarmv7.a

(określić ścieżkę wyjściową chcesz wyodrębnić do)

  1. Dostajesz 'yourStaticLibraryarmv7.a' które następnie można łatwo wydobyć z domyślnym mac Unarchiver

  2. Na wydobycia, następnie dostać folder 'yourStaticLibraryarmv7' zawierającą wszystkie .o pliki

  3. otool -l yourFile.o | grep bitcode lub z konkretnym architektury

    otool -arch ARMv7 -l yourFile.o | grep bitcode

Jeśli plik jest włączona bitcode, masz 'sectname __bitcode' w linii poleceń

+0

domyślny Unarchiver Mac dawał mi żal, więc możesz wypróbować to polecenie 'ar -t yourStaticLibraryarmv7.a', aby zobaczyć listę plików .o, i 'ar -xv yourStaticLibraryarmv7.a yourFile.o' – yano

Powiązane problemy