2016-09-22 53 views
21

Po uaktualnieniu kodu xcode do wersji 8.0 mój projekt aplikacji jest kompilowany z błędem dla celu urządzenia, ale został pomyślnie zbudowany dla symulatora.ld: nie znaleziono biblioteki dla błędu -lcrt1.3.1.o podczas uruchamiania aplikacji na urządzeniu z kodem xcode 8.0 z iOS10

Błąd jest jak:
ld: biblioteki nie znaleziono -lcrt1.3.1.o

co robi rozwiązanie tego błędu.

+0

się linker nie może znaleźć biblioteki, której szuka. Może to być podobne do http://stackoverflow.com/questions/1471968/xcode-linker-error-library-not-found-for-ladmobdevice –

Odpowiedz

44

Po spędzeniu wielu czasu, w końcu dostałem powód tego błędu.

Błąd: ld: biblioteki nie znaleziono -lcrt1.3.1.o

Rozwiązanie: Jeśli źródło wdrażania projektu mają cel z iOS 5.0 a następnie zmienić go do iOS 6.0 lub nowszym i twój błąd zostanie naprawiony. Teraz to działa dobrze również dla urządzenia.

Hurray !!!

+0

awesome ......... – Guru

+2

Pomogło mi to dzięki bardzo stara aplikacja, którą próbowałem znowu uruchomić. Dzięki! – robertfiorentino

+0

To nie ** naprawiam ** ten sam problem dla mnie. Ktoś wie o innym rozwiązaniu? – fishinear

17

crt1.3.1.o to biblioteka, która była zawarta w starszych wersjach iOS (i tym samym ich SDK), ale nie jest już obecna w nowszych pakietach SDK. Jednak, gdy docelowy obszar wdrażania projektu jest ustawiony na starszy iOS (< 6.0, jak wykrył @Sandy), Xcode nadal próbuje połączyć się z nim.

Aby w dalszym ciągu obsługiwać iOS 5.x w nowszych wersjach Xcode, wystarczy skopiować crt1.3.1.o ze starszego kodu Xcode do odpowiedniego katalogu …/usr/lib/ w nowszym Xcode. Xcode użyje tylko crt1.3.1.o, jeśli docelowym wdrożeniem jest < 6.0- dla projektów z docelowym wdrożeniem ≥6.0 crt1.3.1.o pozostaje niewykorzystany, a wynikowy połączony plik binarny jest identyczny z tym, który był wcześniejszy - add-…/usr/lib/crt1.3.1.o.

Aby uzyskać nowszą Xcode prawidłowo powiązać projekt z docelowym wdrażania 5.x iOS:

  1. Pobierz starszą Xcode, że nadal ma crt1.3.1.o z https://developer.apple.com/downloads/.

    Użyłem Xcode 5.1.1, chociaż powinien działać jakikolwiek Xcode z obsługą iOS 5.x (który, according to Wikipedia powinien być Xcode 4.2-6.4).

  2. Otwórz Xcode .dmg i na obrazie dysku znajdź plik pod numerem /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS….sdk/usr/lib/crt1.3.1.o.

    Odkąd używałem Xcode 5.1.1, mój był pod numerem …/iPhoneOS7.1.sdk/usr/lib/crt1.3.1.o.

  3. Skopiuj do tego samego katalogu Xcode.app w twoim nowym Xcode: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/crt1.3.1.o.

    Mój nowszy-Xcode w chwili pisania jest najnowszym wydaniem, Xcode 8.1 (który out-of-the-box obejmuje iOS 10.1 SDK i wsparcie do pobrania iOS Simulator z powrotem do iOS 8.1).


Należy pamiętać, że trzeba ponownie wykonać czynności po każdym uaktualnieniu Xcode, ponieważ standardowy proces aktualizacji Xcode jest po prostu zdmuchnąć Xcode.app a wszystko zawarte w zaktualizowanym Xcode.app.

Należy również pamiętać, że pomyślnie przetestowałem to za pomocą Xcode 8.1, aby utworzyć aplikację z docelową wersją wdrożenia na system iOS 5.0, która będzie działać zarówno na moim iOS 10.1.1 iPad Air 2 & iOS 6.1.3 na iPhone 4S. Nie przesłałem jednak kompilacji wykorzystującej ten proces do sklepu z aplikacjami na iOS. Chociaż jest mało prawdopodobne, że certyfikacja Apple będzie miała problem z tym (ponieważ jest to przecież ich własna biblioteka iOS crt1.3.1.o, a ponieważ nie ma innego sposobu na zbudowanie aplikacji na najnowszym SDK przy jednoczesnym wspieraniu iOS z powrotem do 5.x, co jest prawie na pewno czymś, co wciąż robią niektórzy klienci korporacyjni), Nie mogę tutaj wyrazić stanowczej obietnicy.

+0

Awesome! Miałem zarówno 'Xcode' i' Xcode_7_3', i wykonałem to: 'sudo cp /Aplikacje/Xcode_7_3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/crt1.3.1 .o/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/', i rozwiązało problem !! – ishahak

0

usunąć linie -lPods- (someCocoaPod) z listy "Inne znaczniki linkerów", ale tylko jeśli $ (dziedziczone) znajduje się na górze. Na początku nie byłem pewien, ale uspokajającym sygnałem było to, że wciąż widziałem odniesienia do moich cocoapods, kiedy opuściłem tryb edycji (dziedziczony). Testowałem w debugowania i uwalniania, z których oba były dając mi błędy, a problem został natychmiast rozwiązany