Cel… przesłania ustawienie kompilacji `OTHER_LDFLAGS` zdefiniowane w` Pods / Pods.xcconfig


237

Mam włączyć SpatialIitedo projektu Xcode, który wykorzystuje plik Główka Proj.4, tylko jeden cel. Oba są projektami Xcode i mają statyczne cele.

Próbuję przeprowadzić migrację z submodułu git do Cocoapods. Ponieważ statyczne cele wydają się trudne w użyciu z Cocoapods, chcę po prostu zbudować projekt w zwykły sposób. Zrobiłem podspec dla Proj.4. Po napisaniu podfile dla SpatialLitedostałem ostrzeżenia:

[!] The target `SpatialiteIOS [Debug]` overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Pods.xcconfig'.
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

[!] The target `SpatialiteIOS [Debug]` overrides the `HEADER_SEARCH_PATHS` build setting defined in `Pods/Pods.xcconfig'.
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

[!] The target `SpatialiteIOS [Debug - Release]` overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Pods.xcconfig'.
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

[!] The target `SpatialiteIOS [Debug - Release]` overrides the `HEADER_SEARCH_PATHS` build setting defined in `Pods/Pods.xcconfig'.
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

Przeczytałem ten problem, ale nie mam pojęcia, co oznaczają ostrzeżenia i co mogę zrobić, aby to naprawić.

Dodatkowo problem, gdy otwieram obszar roboczy, a także otwieram sam projekt SpatiaLite, oba są ukierunkowane na Mac OSX 64, gdy ma to być projekt na iOS. Mój plik podfile mówi „platforma: ios”.


2020 - dla każdego, kto zmaga się z tym irytującym problemem. To naprawdę jest spowodowane tylko przez (Niespodzianka!) Facebook. Jak wyjaśniono TUTAJ, firebase.google.com/docs/auth/ios/firebaseui „Jeśli wolisz, możesz dodać tylko składnik Auth i dostawców, z których chcesz korzystać ...” po wyeliminowaniu opcji facebook nie ma problemu . : /
Fattie

Odpowiedzi:


543

To zdecydowanie działa przez większość czasu:

Przejdź do celu Ustawienia budowania -> Inne flagi linkera -> kliknij dwukrotnie. Dodaj $(inherited)do nowej linii.

Jeśli masz problem z „... celem zastępuje ustawienie kompilacji GCC_PREPROCESSOR_DEFINITIONS zdefiniowane w ...”, musisz dodać $ (odziedziczony) do docelowych ustawień kompilacji -> Makra preprocesora


29
Chciałbym rozszerzyć tę odpowiedź. Jeśli masz problem z „... cel zastępuje GCC_PREPROCESSOR_DEFINITIONSustawienie kompilacji zdefiniowane w ...”, musisz dodać $ (odziedziczony) do swojego docelowego ustawienia kompilacji -> Makra preprocesora
Libor Zapletal

1
podejrzewam, że „... cel zastępuje INSERT_YOUR_MISSING_DEFINITION ...”, to musisz dodać do niego $ (odziedziczony). co dziwne, mój xcode domyślnie pokazywał $ (odziedziczony). zredagowałem i po prostu przepisałem to samo. błąd zniknął ..
Joe

3
@joe Nadal dla mnie nie działa. Wypróbowałem wszystkie te sugestie, ale po ponownym uruchomieniu instalacji pod błędy nadal występują. Dokonałem zmian zarówno w innych flagach linkera, jak i makrach preprocesora. W obu przypadkach nic się nie pokazuje, dopóki nie klikniesz dwukrotnie każdej linii w innych flagach linkera i makrach preprocesora. Następnie możesz zobaczyć, że $ (odziedziczone) zostało dodane. Próbowałem usunąć i odczytać. Próbowałem zamknąć i ponownie otworzyć xcode. Nic nie naprawia komunikatów o błędach, gdy piszę w instalacji pod.
JeffB6688,

1
@msmq Minęło dużo czasu, ale czy pamiętasz obejście, które próbujesz i sprawiło, że działa? $(inherited)jest już w górnej linii, ale dla mnie to nie działa: /
Kostas Dimakis

1
dodałem to stil pod instalacja rzuca ten sam błąd.
rohitwtbs

75

Istnieje konflikt między ustawieniami kompilacji a domyślnymi ustawieniami kompilacji, których chce Cocoapods. Aby zobaczyć ustawienia kompilacji Cocoapods, przejrzyj pliki .xcconfig w Pods / Docelowe pliki obsługi / Pods - $ {NAZWA PROJEKTU} / w swoim projekcie. Dla mnie ten plik zawiera:

GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Commando"
OTHER_LDFLAGS = -ObjC -framework Foundation -framework QuartzCore -framework UIKit
PODS_ROOT = ${SRCROOT}/Pods

Jeśli jesteś zadowolony z ustawień Cocoapods, przejdź do Ustawień kompilacji dla swojego projektu, znajdź odpowiednie ustawienie i naciśnij klawisz Delete. Spowoduje to użycie ustawienia z Cocoapods.

Z drugiej strony, jeśli masz niestandardowe ustawienie, którego musisz użyć, dodaj $ (dziedziczone) do tego ustawienia.


Miałem również ten problem, byłem w stanie usunąć -ObjC i to rozwiązało ten problem. Jednak gdy próbowałem zbudować projekt, pojawia się błąd sugerujący, że nie można znaleźć docelowej biblioteki pod: „ld: nie znaleziono biblioteki dla -lPods-MyProject”. Widziałeś coś podobnego?
Roderic Campbell

3
Znów się na to wpadam. Nie jestem pewien, że $ (odziedziczony) oznacza. Gdzie mam to dodać?
huggie

@RodericCampbell Odkryłem, że usunięcie -ObjC z projektu działa dla mnie dobrze i nie widzę twojego błędu.
huggie

1
Hmm, ale potrzebuję flagi -ObjC do tego w czasie wykonywania, odkąd mam kategorie.
huggie

3
OTHER_LDFLAGS = Inne połączone flagi, HEADER_SEARCH_PATHS = Ścieżki wyszukiwania nagłówka, GCC_PREPROCESSOR_DEFINITIONS = Makra preprocesora. @kraftydevil, jakie ustawienie próbujesz usunąć?
phatmann

30

Widziałem te 3 błędy komendy pod w terminalu

pod install

[!] Cel MY_APP [Debugowanie / wydanie] przesłania HEADER_SEARCH_PATHS ...
[!] Cel MY_APP [Debugowanie / wydanie] zastępuje OTHER_LDFLAGS ...
[!] Cel MY_APP [Debugowanie / wydanie] zastępuje GCC_PREPROCESSOR_DEFINITIONS .. .

Wszystkie te 3 błędy zniknęłyby po dodaniu $ (odziedziczonej) do

  1. Ścieżki wyszukiwania nagłówka
  2. Inne flagi linkera
  3. Makra preprocesora

w Projekcie -> Cel -> Ustawienia kompilacji

A teraz polecenie będzie działać bez żadnych błędów

pod install

Powyższe działało dla mnie, gdy sama zmiana flagi Other Linker Flagsnie była wystarczająca.
JaredH

21

W swoim projekcie znajdź Target -> Build Settings -> Other Linker Flags, wybierz Other Linker Flags, naciśnij delete(Klawiatura Mac) / Backspace(Normalna klawiatura), aby przywrócić ustawienie. Mi to pasuje.

Przykład:

Przed wprowadź opis zdjęcia tutaj

Po wprowadź opis zdjęcia tutaj


1
czy usuwamy ustawienia już znajdujące się w innych flagach linkera? czy trzymamy je i dodajemy $ (odziedziczone)?
isJulian00

20

Miałem podobny problem podczas uruchamiania pod install, widziałem następujące ostrzeżenia / błędy (związane z CLANG_CXX_LIBRARY):

Błąd / Ostrzeżenie od Cocoapods

[!] The `Project [Debug]` target overrides the `CLANG_CXX_LIBRARY` build setting defined in `Pods/Target Support Files/Pods/Pods.debug.xcconfig'. This can lead to problems with the CocoaPods installation
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

[!] The `Project [Release]` target overrides the `CLANG_CXX_LIBRARY` build setting defined in `Pods/Target Support Files/Pods/Pods.release.xcconfig'. This can lead to problems with the CocoaPods installation
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

Poprawka

  1. Wybierz Project, abyś mógł zobaczyć Build Settings.
  2. Wybierz Target( AppNameponiżej Targets)
  3. Znajdź C++ Standard Library(najprawdopodobniej będzie w stanie ZŁOTA - oznacza to, że zostało zastąpione).
  4. Wybierz linię (więc jest podświetlona na niebiesko) i naciśnij ⌘ + DELETE(Command + Backspace)

Linia nie powinna być już pogrubiona, a po uruchomieniu pod installostrzeżenia / błędy powinny zniknąć.


Pomoc wizualna

CLANG_CXX_LIBRARY Błąd / ostrzeżenie w przypadku Cocoapods


12

Jeśli Xcode narzeka podczas łączenia, np. Nie znaleziono biblioteki dla -lPods, nie wykrywa ukrytych zależności:

Przejdź do produktu> edytuj schemat Kliknij kompilację Dodaj bibliotekę statyczną Pods Wyczyść i skompiluj ponownie


Próbowałem tak, jak zasugerowałeś, ale nie wyświetla on ostatnio zainstalowanych ram według pliku pod, żadnych innych sugestii, aby naprawić błędy flagi linkera. @Amit Saxena
Anilkumar iOS ReactNative

11

Dla mnie problem dotyczył testów celów. Miałem już $(inherited)flagę w głównym celu aplikacji.

Dodałem go do flag MyAppTests Other Linker. Po tym, jak uruchomiłem, pod installkomunikat ostrzegawczy zniknął. wprowadź opis zdjęcia tutaj



6

Dodałem $ (odziedziczony), ale mój projekt wciąż się nie kompilował. Dla mnie problemem była flaga „Kompiluj tylko dla aktywnej architektury”, musiałem ustawić ją na TAK.


jeśli projekt się kompiluje, czy możemy po prostu zignorować ostrzeżenia?
isJulian00
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.