Pytanie XCode 6 GM: błąd linkera podczas budowania urządzenia (Metal nie znaleziony)


Próbuję zbudować mój projekt w XCode 6 GM dla urządzenia (podstawowa wersja SDK to 7.1) i otrzymuję błąd linkera:

ld: framework not found Metal for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Ten sam projekt jest doskonale zbudowany w XCode 5 bez żadnych zmian w ustawieniach projektu. (Ponadto, kompilacja w XCode 6 dla symulator się uda.)

Buduję z SDK 7.1, dlaczego XCode 6 próbuje mimo to połączyć się z Metalem?


11
2017-09-12 09:11


pochodzenie


Sprzątanie projektu naprawiło to dla mnie. - c1pherB1t
Czy miałeś na myśli cel wdrożenia 7.1 w zestawie SDK 8.0? Xcode 6 nie ma pakietu SDK 7.1. - Jeremy Huddleston Sequoia
@ JeremyHuddlestonSequoia nie, miałem na myśli 7.1 SDK. Skopiowałem go z katalogu XCode 5. - HiveHicks
Być może używasz sdk innej firmy. Rozwiązanie tego problemu polega na tym, że musisz usunąć swój zewnętrzny sdk i zintegrować go jeden po drugim. po integracji każdego sdk musisz zbudować kod, aby sprawdzić, czy błąd metalu istnieje, czy nie. - Shauket Sheikh


Odpowiedzi:


Mając ten sam problem. Jestem w stanie zbudować aplikację dobrze w Xcode 6 wskazał na symulator lub telefon, ale podczas archiwizacji otrzymuję ten błąd. Korzystam z zestawu SDK iOS 7.1.

Używam cocoapodów i odkryłem, że mogę rozwiązać problem albo automatycznie ustawiając "Link Frameworks" na NO dla projektu strąków lub archiwizując, gdy jest podłączone urządzenie, a schemat jest kierowany na urządzenie, a nie tylko "Urządzenie iOS". 

Jest to problem spowodowany ustawieniami domyślnymi kompilacji projektu Xcode 6.

Edycja: Oto inne wyjaśnienie tego rozwiązania: http://www.appsee.com/blog/dev/xcode-new-link-frameworks-automatically-fix-framework-not-found-metal-for-architecture-armv7


9
2017-09-19 00:43



To tak naprawdę nie odpowiada na pytanie. Jeśli masz inne pytanie, możesz je poprosić, klikając Zadaj pytanie. Możesz również dodaj nagrodę zwrócić więcej uwagi na to pytanie, gdy już wystarczy reputacja. - MrTux
Odpowiada na pytanie @MrTux ... podano rozwiązanie, ale OP będzie nadal lepszy, jeśli będzie dostępny. - Ben
Od tego czasu umieściłem cocoapods pod kontrolą wersji i ustawiłem automatycznie Ramki Linków na NO i je zatwierdziłem. Mój zespół nie miał żadnych problemów, ponieważ mój serwer Jenkins też jest szczęśliwy. - RJDubz
Opcja "archiwum z opcją urządzenia podłączonego" zadziałała dla mnie, a także użytkownik cocoapods. Prawdopodobnie zależy to od samych kapsuł. Na przykład, zanim użyłem DBCamera, ustawienia Link Frameworks Automatically do NO jak wspomniano powyżej działało dobrze. Ale ponieważ DBCamera ma zależność od GPUImage, dla którego cel CPUImage Link Frameworks Automatically jest ustawione na ${PODS_GPUIMAGE_CLANG_MODULES_AUTOLINK}Podejrzewam, że właśnie dlatego nie mogę tego ustawić NO. - kraftydevil


Miałem ten sam problem w budowaniu kodu bazowego dobrze iOS 8.0 SDK (Xcode 6.0.1) i mając ten problem z iOS 7.1 SDK (choć w Xcode 5.1.1). Wygląda na to, że wiele różnych projektów ma ten problem. Widzieć tutaj po więcej szczegółów.

To, co naprawiło problem, to przejście do ustawień "Faza tworzenia" moich celów, "Link Binary with Libraries", a następnie usunięcie i ponowne dodanie CoreVideo.framework, "Product> Clean", wreszcie "Product> Run" .


1
2017-09-23 11:24





Używanie zestawu SDK iOS 7.1 z Xcode 6 nie jest obsługiwaną konfiguracją. Linker działa tutaj poprawnie. 7.1 SDK nie zawiera Metal.framework do połączenia z, a Ty prosiłeś o połączenie z Metal.framework. Aby użyć programu Metal.framework, musisz użyć zestawu SDK systemu iOS 8.0 lub nowszego.


-1
2017-09-22 22:04



Nie używam szkieletu Metal. - HiveHicks
Podany przez Ciebie log wyraźnie wskazuje inaczej. Sugeruję użycie zestawu SDK iOS 8, ponieważ jest to jedyny obsługiwany pakiet SDK dla systemu iOS do użytku z Xcode 6. Następnie spójrz na fazy budowania celu projektu Xcode, aby zobaczyć, co przynosi Metal.framework. - Jeremy Huddleston Sequoia
BS. Możesz usunąć pakiet SDK 7.1 w Xcode 6, ze względu na brak dwóch wersji Xcode na twoim komputerze. - Rick van der Linde
@Rick ... Tak, możesz to zrobić, a niektóre rzeczy mogą nadal działać, ale nie jest to obsługiwana konfiguracja. - Jeremy Huddleston Sequoia