Mam statyczną bibliotekę zbudowaną przez inną firmę. Chcę wiedzieć, czy jest to statyczna biblioteka zawierająca kod, który polecenie może wykryć w terminalu?Jak sprawdzić, czy biblioteka statyczna została zbudowana, zawiera kod bitu?
Odpowiedz
Można spróbować: otool -l (.o lub .a plik)
i poszukaj sekcji "__bitcode"
Został tu odpowiedzi: How do I xcodebuild a static library with Bitcode enabled?
Zaleca się testowanie z symbolami LLVM:
otool -l yourlib.a | grep LLVM
Powinieneś dostać kilka linii z "__LLVM"
Próbuję go, ale niczego nie znalazłem, yourlib.a zawiera kod bitu, jestem pewien. – xCocoa
Czy tworzyłeś archiwum? – SeikoTheWiz
Czy możesz podać źródło swojego roszczenia? Dlaczego powinienem grep dla 'LLVM'? – Paul
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
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? –
@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
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. –
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.
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
uzyskać informacje o architekturze
lipo -info yourStaticLibrary.
np Wydajność: ARMv7 arm64
Ekstrakt
yourStaticLibrary.a
na jeden lub oba z powyższej architekturzelipo yourStaticLibrary.a -thin ARMv7 -Output yourStaticLibraryarmv7.a
(określić ścieżkę wyjściową chcesz wyodrębnić do)
Dostajesz
'yourStaticLibraryarmv7.a'
które następnie można łatwo wydobyć z domyślnym mac UnarchiverNa wydobycia, następnie dostać folder '
yourStaticLibraryarmv7'
zawierającą wszystkie .o plikiotool -l yourFile.o | grep bitcode
lub z konkretnym architekturyotool -arch ARMv7 -l yourFile.o | grep bitcode
Jeśli plik jest włączona bitcode, masz 'sectname __bitcode' w linii poleceń
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
Mój rozwój jest Xcode7 i El Capitan 10.11.1 użyłem komendy, ale nie może znaleźć „__bitcode "sekcja – xCocoa