Błąd „Nie znaleziono biblioteki dla” po umieszczeniu aplikacji w AdMob


150

Po umieszczeniu aplikacji w AdMob pojawia się błąd. Aplikacja działała do dziś. Błąd jest następujący:

ld: library not found for -lGoogleAdMobAds
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Jak mogę to naprawić? Dziękuję Ci.




Czasami: odłącz urządzenie i najpierw skompiluj projekt. Wygeneruje biblioteki, a następnie będziesz mógł działać w urządzeniu.
TheTiger

Odpowiedzi:


114

Czasami wystarczy usunąć odniesienie do biblioteki i ponownie dodać odniesienie.

Oprócz ponownego dodania pakietu SDK do reklam mobilnych Google i innych bibliotek od zera, polecam sprawdzenie ścieżek wyszukiwania w bibliotece . Zdarzają się sytuacje, gdy kopiujesz lub duplikujesz cel, Xcode decyduje, że musi on uniknąć podwójnych cudzysłowów „za pomocą„ \ ”. Upewnij się, że usunąłeś wszystkie znaki \ '- powinno to wyglądać tak:

wprowadź opis obrazu tutaj

Udało mi się zduplikować błąd, poprzedzając moją ścieżkę wieloma znakami „\”.


dobry, po instalacji poda jedna z bibliotek nie została tam wymieniona. Nie wiem dlaczego, ale dodanie tej ścieżki biblioteki sprawia, że ​​działa.
Warewolf

Cóż, to rozwiązało mój problem „Nie znaleziono biblioteki dla -lART” i jest to naprawdę niewiarygodne! Dziękuję Ci !
ZedTuX

Weź pod uwagę również „Ścieżki wyszukiwania nagłówków”.
Luat Vu Dinh

@raurora Jak uzyskać dostęp do ścieżek wyszukiwania bibliotek?
Massimo Frittelli

1
@MassimoFrittelli Project> karty Ustawienia kompilacji> Ścieżki wyszukiwania. Możesz też wpisać opcję wyszukiwania.
raurora

315

Miałem podobny problem „Nie znaleziono biblioteki”. Jednak było tak, ponieważ przypadkowo użyłem .xcodeprojpliku zamiast .xcworkspacepliku.


4
Czy ktoś mógłby wyjaśnić przeznaczenie .xcodeproj i .xcworkspace?
EFreak

11
Takie rzeczy sprawiają, że uwielbiam ekosystem Javascript
Mark

Jak mogę to zmienić ..?
Brayan Loayza

8
xcworkspace występuje, gdy używasz Cocoapods. To nie problem Xcode, ale użytkownicy.
Azam

1
.xcworkspace występuje wtedy, gdy w rozwiązaniu znajduje się więcej niż 1 „projekt”. Na przykład możesz mieć biblioteki zewnętrzne (cocoapods) lub własną bibliotekę, której używasz w wielu projektach.
Daniel Benedykt

86

Wybierz swój cel, przejdź do "Build Phases"w "Link Binary With Libraries"remove ".a"pliku z tej biblioteki. Oczyść i zbuduj.


3
Tak, na tyle dziwne, że Xcode nie zaznacza go jako brakującego, kolorując go na czerwono
brainray

Bardzo miły!! mój problem był, gdy dodałem framework użytkownika do starego projektu. Usuń coreplot.a i działa dobrze !!!!
Jose Pose S

66

Jeśli błąd związany z Cocoapods w następujący sposób:

library not found for -lPod-...

Musisz sprawdzić inne flagi konsolidatora i usunąć je stamtąd.

Dodatkowe informacje: Jeśli masz stary projekt, który wykorzystuje cocoapods. A ostatnio trzeba było dodać use_frameworks! do twojego pliku podfile. cocoapods nie będą już dodawać bibliotek do innych flag konsolidatora, ponieważ są dziedziczone. Dlatego może być konieczne ręczne usunięcie tych flag z innych flag konsolidatora, które zostały dodane przed użyciem use_frameworks!


1
Mam tutaj wiele flag, czy powinienem usunąć wszystkie, czy tylko jedną dla Poda?
Mayur Deshmukh

Jeśli te flagi powodują problem. powinieneś je usunąć lub zachować i dodać bibliotekę, jeśli nadal chcesz z niej korzystać.
hasan

1
Wydaje mi się, że dzieje się tak, gdy próbujesz usunąć bibliotekę dodaną ręcznie przez strąki kakao. Prawidłowym sposobem jest usunięcie biblioteki z pliku podfile. następnie ponownie uruchom instalację
poda

1
Dzięki!! To była dla mnie wskazówka :). W moim przypadku zduplikowany cel podzielił każdy -l "framework" na dwie linie "-l" i "framework" !!
Eva Madrazo

1
@IanSteffy po prostu to połącz
Eva Madrazo

57

W moim przypadku Xcode 7 działał również w Xcode 9.1

ld: library not found for -ldAfnetworking
clang: error: linker command failed with exit code 1 (use -v to see invocation)

ustawiony Build Active architecture OnlynaYes

wprowadź opis obrazu tutaj


2
A co w sytuacji, gdy musimy utworzyć kompilację produkcyjną dla App Store? Mam na myśli to, że powinno być NIE dla wersji produkcyjnej.
Jabbar

zgadzam się, że powinno być NIE dla produkcji
Ted

2
Czy to NIE będzie miało wpływu na instalację wersji produkcyjnej?
Jabbar

1
Pracował dla mnie podczas integracji Pinterest SDK na XCode 9.2 i iOS 11.
Aakash Aggarwal,

21

Dzieje się tak, jeśli używasz cocoapodów, użyj .xcworkspacepliku zamiast .xcodeprojpliku domyślnego .


15

Jeśli błąd jest jak śledzenie

ld: nie znaleziono biblioteki dla -lpods

Okazało się, że plik „libPods.a”, który jest w kolorze czerwonym (podobnie jak brakujące pliki) został w jakiś sposób utworzony w grupie Framework projektu. Po prostu usunąłem ten plik i wszystko poszło dobrze.

EDYCJA: inne rozwiązanie

Kolejne rozwiązanie, na które już odpowiedziałem w podobnym pytaniu, znajduje się w tym linku


12

goto Build Phases -> Połącz plik binarny z bibliotekami i usuń bibliotekę, która pokazuje błędy, ponieważ ta biblioteka nie jest dostępna w folderze projektu


To rozwiązało mój konkretny problem. Miałem dwie podobnie nazwane biblioteki, jedną nazwaną libPods-Foo BarTests.ai drugą nazwaną libPods-FooBarTests.a.
edenwaith

9

Może się to również zdarzyć, jeśli otworzysz plik projektu zamiast obszaru roboczego. Sam w ten sposób zmarnowałem dzień.


1
świetnie, zrobiłem również aktualizację poda podczas zamykania obszaru roboczego, a następnie otworzyłem go po zakończeniu aktualizacji
poda

5

Spóźniłem się na odpowiedź, ale oto lista rzeczy, które wypróbowałem, więc będzie w jednym miejscu, jeśli ktoś chce spróbować rozwiązać problem.

  1. Prawidłowa architektura = armv7 armv7s
  2. Tylko Build Active Architecture = NIE
  3. Cel -> Ustawienia kompilacji -> Inne flagi konsolidatora = $ (dziedziczone)
  4. Cel -> Ustawienia kompilacji -> Ścieżka wyszukiwania biblioteki = $ (dziedziczone)
  5. Produkt czysty
  6. Aktualizacja poda w terminalu

2

W moim przypadku wystąpił problem z nazewnictwem. Moja biblioteka została wywołana ios-admob-mm-adapter.a, ale Xcode spodziewał się, że nazwa powinna zaczynać się od przedrostka lib . Właśnie zmieniłem nazwę mojej biblioteki na libios-admob-mm-adapter.ai naprawiłem problem.

Używam Cocoapods i łączy biblioteki z opcją Inne flagi linkera w ustawieniach kompilacji mojego celu. Wygląda na to flaga-l"ios-admob-mm-adapter"

Mam nadzieję, że pomoże to komuś innemu


2

Po prostu GoogleAdMobAds.abrakuje celu projektu. Jak dla mnie, libAdIdAccessLibrary.aproszę sprawdzić załączony zrzut ekranu

wprowadź opis obrazu tutaj


2

Jak dla mnie ten problem występuje, ponieważ zainstalowałem Material Library dla IOS. aby rozwiązać ten problem

1: Przejdź do ustawień kompilacji docelowej aplikacji.

2: Wyszukaj inne flagi konsolidatora

3: Otwórz inne flagi konsolidatora i poszukaj biblioteki, o której mowa w błędzie.

4: usuń tę flagę.

5: Oczyść i zbuduj.

Mam nadzieję, że to rozwiąże Twój problem.


2

W przypadku ld: library not found for -{LIBRARY_NAME}zdarzyło się, ponieważ plik (i) biblioteki nie istnieje.

Sprawdź ścieżkę do biblioteki na karcie „Fazy tworzenia” w bibliotece ścieżek wyszukiwania elementów docelowych aplikacji.

Ścieżka do pliku (ów) biblioteki musi być zgodna z rzeczywistą ścieżką, na przykład jeśli plik (i) w katalogu głównym projektu musisz ustawić ścieżkę taką jak $(PROJECT_DIR)


1

Wiem, że jest to trochę stare, ale właśnie natrafiłem na podobny problem i uruchomienie „aktualizacji pod” naprawiło to dla mnie. Mój błąd biblioteki dotyczył AFNetworking ...

Po prostu zachowaj ostrożność podczas aktualizacji poda, jeśli nie używasz jawnych wersji w pliku pod.


1

Ten błąd jest bardzo dziwny.

Miałem ten błąd z -ldAfnetworking i kopiuję tylko mój projekt w innej ścieżce i działa.


1

Próbowałem zmienić nazwę mojej konfiguracji kompilacji Releasena Production, ale najwyraźniej strąkom kakao się to nie podoba. Zmieniłem nazwę ponownie na Releasei wszystko działa dobrze.


można również zmienić nazwę celu w podfile.
Romain TAILLANDIER

1

Odpowiedź @ raurora wskazała mi właściwy kierunek. Dodałem biblioteki do mojej ścieżki „watchkitapp Extension / lib”. W tym przypadku ścieżka wyszukiwania biblioteki musiała zostać poprzedzona znakiem „\”, ale konsolidator tego nie rozumiał. Aby naprawić / obejść ten problem, przeniosłem ścieżkę do biblioteki o jeden poziom w górę, aby nie znajdowała się już w katalogu zawierającym spację w nazwie.


1

Po prostu aktualizuję plik pod 'aktualizacja pod' i zaczyna normalnie działać dla mnie.


1

Uruchomienie „aktualizacji pod” w moim projekcie rozwiązało mój problem z błędem „Nie znaleziono biblioteki dla -lSTPopup”.

Przypominając odpowiedź Trevora Panhorsta:

„Po prostu zachowaj ostrożność podczas aktualizacji poda, jeśli nie używasz jawnych wersji w pliku pod”.


1

Proste rozwiązanie. Oto jak mogę rozwiązać ten problem:

  1. Przejdź do katalogu platforms/ios
  2. Następnie wykonaj polecenie pod install

Otóż ​​to. Powinno to zainstalować brakującą bibliotekę.



1

Jest to błąd czasu kompilacji, Static Libraryktóry jest spowodowany przezStatic Linker

ld: library not found for -l<Library_name>
  1. Możesz otrzymać błąd, Library not found forjeśli nie dołączysz ścieżki biblioteki doLibrary Search Paths

    ldoznacza, że Static Linkernie może znaleźć lokalizacji biblioteki. Jako programista powinieneś pomóc konsolidatorowi i wskazać plikLibrary Search Paths

    Build Settings -> Search Paths -> Library Search Paths 
  2. Możesz również otrzymać ten błąd, jeśli po raz pierwszy otworzysz nowy projekt ( .xcodeproj) z obsługą Cocoapods, uruchom pod update. Aby to naprawić, po prostu zamknij ten projekt i otwórz zamiast tego utworzony obszar roboczy ( .xcworkspace)


0

Otrzymywałem podobne błędy w bibliotece nie znaleziono. Ostatecznie udało mi się to rozwiązać

  1. Przed rozpoczęciem korzystania z Xcode Archive korzystałem z kompilacji flutter na iOS
  2. Zmieniono cel wdrożenia IOS na wyższy docelowy iOS 11.2. Wcześniej miałem coś takiego jak 8.0, które dawało wszystkie powyższe błędy.
  3. Upewnij się, że cele wdrożenia systemu IOS w Xcode są takie same w projekcie, miejscu docelowym i podach
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.