2012-09-22 20 views
9

Niedawno właśnie zaktualizowałem do nowego XCode. Po aktualizacji niektóre z moich aplikacji nie będą budowane. Otrzymuję ten błąd:CommonCrypto nie buduje dla ARV armv7 iOS

ld: cannot link directly with /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/system/libcommonCrypto.dylib. Link against the umbrella framework 'System.framework' instead. for architecture armv7 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Próbowałem wszystkiego - czyszczenie, ponownego importowania, zmieniając architektur ...

Proszę o pomoc

+4

Idź do krokach cel budować, pod „łącza z biblioteki” lub tak, usuń libcommonCrypto.dylib. –

+0

Należy pamiętać, że robiąc to, co powiedział tc, nie przenoś go do kosza. Jeśli to zrobisz, dostaniesz „ld: w«/usr/lib/system/libcommonCrypto.dylib», brakuje wymaganego architektury ARMv7 w pliku /usr/lib/system/libcommonCrypto.dylib (2 plastry) dla architektury ARMv7”. Po prostu odłóż go z kosza. – Jochem

+0

@tc. dlaczego usunąć libCommonCrypto.dylib? – onmyway133

Odpowiedz

3

właśnie rozwiązał to w następujący sposób:

Okazuje że błąd libcommonCrypto.dylib był czerwonym śledziem.

Po usunięciu libcommonCrypto.dylib zgodnie z powyższymi sugestiami otrzymałem 9 nowych błędów. Na pierwszy rzut oka zakładałem, że były to błędy kryptograficzne, ale w rzeczywistości nie były; dla mnie w rzeczywistości wywodzi się z tego, że zLib nie został uwzględniony, co zostało "zaimportowane" w głębszej części ogólnej implementacji (z której krypto jest częścią).

Dla mnie specjalnie, że sięgają do ASIDataDecompressor.h, #import < zlib.h>

Naprawiłem go w tym brakujące ramy libz.dylib; ostatecznie nie musiałem jawnie włączać libcommonCrypto.dylib.

Należy więc dokładnie sprawdzić błędy po przełączeniu libcommonCrypto i upewnić się, że nie brakuje niektórych innych bibliotek.

16

Rozwiązałem tę kwestię w inny sposób, po tym, jak wypróbowałem oba powyższe, w których żaden z nich nie zadziałał.

Problem polegał na tym, że kiedy byłem dodając bibliotekę z głównego interfejsu (główny wbudowany ustawienia itp ...) Szukałem początkowo crypto a następnie dwa libs wraca libcorecrypto.dylib i liblibcommonCrypto.dylib, jeśli zauważy, zarówno istnieje w kolorze szaro-szarym, w odróżnieniu od bibliotek zwykle koloru żółtego, które zwykle dodajesz. Dodanie tych informacji spowoduje, że kompilator będzie zgłaszał się z powrotem (brakuje niektórych innych bibliotek, takich jak libz, lub inna biblioteka, która będzie potrzebna, im więcej funkcji zostanie podjętych.)

Jeśli zauważysz, że powyższe dwie biblioteki zwykle będą znajdować się pod JavaScriptCore.framework biblioteka (który jest żółta), a zatem, poprzez usunięcie dwóch powyższych i dodanie JavaScriptCore.framework zamiast problem został rozwiązany, a build successful wykazały

również wspomnieć, że opiera się na szaro-bibliotekami występują w postaci wiązki wewnątrz JavaScriptCore.framework, libcrypto i drugi nie będzie istnieć pod wspomnianym wyżej /Library/.../system/path, tzn. nie usunąłeś ich z systemu, po prostu ich tam nie ma.

Ponownie, rozwiązaniem jest:

* Od głównych ustawieniach projektu Xcode, nie dodać: * dd

libcorecrypto.dylib 
liblibcommonCrypto.dylib 

Zamiast dodawać:

JavaScriptCore.framework 

W twoim.m (kod), tylko zaopatrywać je normalnie, wykonując:

#include <CommonCrypto/CommonDigest.h> (or any of your other libs as needed in code)... 

To powinno zadziałać.

Mam nadzieję, że to pomoże.

poważaniem

+0

Dzięki stary ... to działało + 1 – abhi1992

+0

#import. - nie #include – ETech

0

Używam cocoapods do zarządzania biblioteką. Jedna z bibliotek (proste wyszukiwanie w twoim obszarze roboczym) zawierała odnośnik do CommonCrypto.framework, który był czerwony na liście frameworków w ustawieniach projektu.

W moim przypadku musiałem usunąć zależność od CommonCrypto.framework, ale rozwiązanie to trwa tylko kolejną aktualizację swoich strąków.

Btw Chciałbym wiedzieć polecenie do listy wykres zależności między bibliotekami w Podfile.

0

Miałem ten sam błąd,

ld: in '/usr/lib/system/libcommonCrypto.dylib', missing required architecture arm64 in file /usr/lib/system/libcommonCrypto.dylib (2 slices) for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

I rozwiązać ten problem poprzez sprawdzenie mojego $ PATH. To był brakujący plik.

Korzystanie find/-type f -name libcommonCrypto.dylib

Porównując moje bibliotekami z moich systemów znajomych mac, to pokazuje, że ten plik nie był obecny na moim komputerze:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/system/libcommonCrypto.dylib

Xcode za pomocą $ PATH fallback na /usr/lib/system/libcommonCrypto.dylib ale nie jest dobrze zbudowany (i386 zamiast ramienia).

Skopiowałem wersję mojego przyjaciela, wprowadziłem /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/system/, a następnie mogłem ponownie zbudować moje projekty.

Jest to błędne tu problem bo nie jest dużo dla tego samego pliku lib zależności od architektury, a większość z nich nie są przeznaczone do użytku dla iOS buduje. Ale zmienna $ PATH env var będzie wersją zastępczą na/usr/lib, gdy na dedykowanych katalogach nie zostaną znalezione żadne pliki.

Powrót do kodu Xcode na /usr/lib/system/libcommonCrypto.dylib, ale z pewnością nie jest to poprawna lib, ponieważ nie jest zbudowany na ios, ale zbudowany dla mojego mac.

0

Better Solution, jak mówi usunąć libcommonCrypto.dylib i zastąpić dodając SystemConfiguration.framework.It pracował dla mnie, może być przydatna do someone.I był coraz Linker błędzie gettingLink przeciwko ramach parasola „System.framework” zamiast tego.

Powiązane problemy