Xcode 4 build powiodło się, kompilacja wiersza poleceń nie powiodła się?

Mam projekt w Xcode 4 (najnowsza wersja non-beta), który buduje dobrze, gdy jest wbudowany w Xcode. W szczególności polecenie LD poprawnie używa pochodnego katalogu danych(w którym umieszczone są produkty kompilacji, w tym zależna biblioteka statyczna).

Jednak, gdy buduję ten sam projekt z linii poleceń, polecenie Ld nie powiedzie się, ponieważ próbuje użyć folderu / build w projekcie, który nie jest wypełniany.

Próbowałem dostosować każde ustawienie budowania I wiedzieć, zarówno w projekcie rodzica, jak i zależnego.

Jakieś pomysły, od czego zacząć debugowanie? Mogę dostarczyć więcej informacji w razie potrzeby.

Edit 1: Full Xcode build command:

xcodebuild -project AppName.xcodeproj -target AppName -configuration "Config Name"

Gdzie AppName i Config Name są poprawnymi wartościami dla kompilacji.

Edit 2: polecenia Link (Ld).

Po wbudowaniu Xcode (to działa):

Ld /Users/james/Library/Developer/Xcode/DerivedData/AppName-apkmkuhwuccsbpblulxcsafyxkwa/Build/Products/Debug-iphonesimulator/AppName.app/AppName normal i386
cd /Users/james/Code/ClientName-Depot/NameOfProject/trunk/AppName
setenv MACOSX_DEPLOYMENT_TARGET 10.6
setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/usr/local/git/bin"
/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-gcc-4.2 -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk -L/Users/james/Library/Developer/Xcode/DerivedData/AppName-apkmkuhwuccsbpblulxcsafyxkwa/Build/Products/Debug-iphonesimulator -L/Users/james/Code/ClientName-Depot/NameOfProject/trunk/AppName -F/Users/james/Library/Developer/Xcode/DerivedData/AppName-apkmkuhwuccsbpblulxcsafyxkwa/Build/Products/Debug-iphonesimulator -filelist /Users/james/Library/Developer/Xcode/DerivedData/AppName-apkmkuhwuccsbpblulxcsafyxkwa/Build/Intermediates/AppName.build/Debug-iphonesimulator/AppName.build/Objects-normal/i386/AppName.LinkFileList -mmacosx-version-min=10.6 -lxml2 -all_load -ObjC -licucore -Xlinker -objc_abi_version -Xlinker 2 -lMyClientLibrary -lxml2 -lsqlite3.0 -framework Security -framework MessageUI -framework QuartzCore -framework MediaPlayer -framework MapKit -framework CoreLocation -framework AudioToolbox -lz.1.2.3 -framework MobileCoreServices -framework SystemConfiguration -framework CFNetwork -framework UIKit -framework Foundation -framework CoreGraphics -o /Users/james/Library/Developer/Xcode/DerivedData/AppName-apkmkuhwuccsbpblulxcsafyxkwa/Build/Products/Debug-iphonesimulator/AppName.app/AppName

Przy budowaniu z linii poleceń przy użyciu powyższej komendy build (to nie powiedzie się):

Ld "build/AppName.build/Prod Ad Hoc-iphoneos/AppName.build/Objects-normal/armv6/AppName" normal armv6
cd /Users/james/Code/ClientName-Depot/NameOfProject/trunk/AppName
setenv IPHONEOS_DEPLOYMENT_TARGET 4.0
setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/usr/X11/bin:/opt/local/bin"
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk "-L/Users/james/Code/ClientName-Depot/NameOfProject/trunk/AppName/build/Prod Ad Hoc-iphoneos" -L/Users/james/Code/ClientName-Depot/NameOfProject/trunk/AppName "-F/Users/james/Code/ClientName-Depot/NameOfProject/trunk/AppName/build/Prod Ad Hoc-iphoneos" -filelist "/Users/james/Code/ClientName-Depot/NameOfProject/trunk/AppName/build/AppName.build/Prod Ad Hoc-iphoneos/AppName.build/Objects-normal/armv6/AppName.LinkFileList" -dead_strip -lxml2 -all_load -ObjC -licucore -miphoneos-version-min=4.0 -lMyClientLibrary -lxml2 -lsqlite3.0 -framework Security -framework MessageUI -framework QuartzCore -framework MediaPlayer -framework MapKit -framework CoreLocation -framework AudioToolbox -lz.1.2.3 -framework MobileCoreServices -framework SystemConfiguration -framework CFNetwork -framework UIKit -framework Foundation -framework CoreGraphics -o "/Users/james/Code/ClientName-Depot/NameOfProject/trunk/AppName/build/AppName.build/Prod Ad Hoc-iphoneos/AppName.build/Objects-normal/armv6/AppName"

Które zwraca:

ld: library not found for -lMyClientLibrary
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1
Author: James J, 0000-00-00

10 answers

Ok, więc prawie 6 (płatnych) godzin później, dostałem kompilacji działać poprawnie w Xcode i na linii poleceń(i na serwerze kompilacji, cały sens tego ćwiczenia).

Po drodze naprawiłbym jeden problem tylko po to, aby spowodować inny-najwyraźniej naprawiłbym problem z linkerem/Ld, tylko po to, aby spowodować problemy w kompilacji ("SomeClass undeclared (first use in this function) "lub" SomeHeader.h: nie ma takich błędów w pliku lub katalogu).

To był jeden z tych czasów, że Dostosowałem prawie każde ustawienie, które mogłem znaleźć, więc trudno powiedzieć, co dokładnie jest złe, a co dokładnie to naprawiło.

Rzeczy, które myślę Może pomogły są następujące:

    W przeciwieństwie do poprzednich wersji, Xcode nie może być używany w środowisku Xcode.]} [16]} zmieniono przestrzeń roboczą, aby projekt aplikacji i biblioteka statyczna były rodzeństwem (nie rodzicem/dzieckiem)
  • zmieniono Ustawienia Xcode i workspace, aby używać określonych lokalizacji kompilacji w celach
  • zmień ścieżkę budowania produktów dla aplikacji i biblioteki do użycia ../build (oba pliki projektu znajdują się w siostrzanych podfolderach katalogu głównego, więc ich wbudowanie w ten sam folder rozwiązało problem z oryginalnym poleceniem linkera/Ld, I think)
  • W tym celu należy utworzyć bibliotekę docelową, a następnie utworzyć ją przed docelową aplikacją.]}
  • w fazach budowania aplikacji docelowej, jawnie dodaj bibliotekę w obszarze " Link Binary With Biblioteki "
  • Zmień typ lokalizacji Biblioteki .odsyłacz do pliku "Relative to Build Products"
  • Dodano fazę budowania "Kopiuj nagłówki" do projektu biblioteki, dodano odpowiednie nagłówki do sekcji publicznej
  • zmieniono ścieżkę folderu nagłówków publicznych projektu biblioteki na "/ include "
  • zmieniono katalog instalacyjny biblioteki na $(BUILT_PRODUCTS_DIR)
  • zmieniono ścieżki wyszukiwania bibliotek i ścieżki wyszukiwania nagłówka użytkownika w aplikacji docelowej na $(BUILT_PRODUCTS_DIR) (rekurencyjny)
  • Dodano polecenie Clean przed kompilacją na moim serwerze kompilacji Jenkins
  • Dodano jawne argumenty SDK i Arch do polecenia build
  • usunięto spacje z nazwy konfiguracji kompilacji

Ostateczne polecenie budowania wygląda tak:

xcodebuild -workspace ClientName.xcworkspace -scheme AppName -configuration "ProdAdHoc" -sdk iphoneos -arch "armv6 armv7"

Kilka przydatnych zasobów, których użyłem podczas debugowania tego wydanie:

W każdym razie, mam nadzieję, że mam dość słów kluczowych powyżej, że każdy, kto ma podobne problemy z budowaniem w przyszłości, natknie się na to i uzna to za przydatne. Nie mam pojęcia, jak workflow zrobiłem wiele razy w Xcode 3.x się tak pokręcił jak przeniosłem się na Xcode 4, mam nadzieję, że Apple jest w stanie to wyczyścić w przyszłych wydaniach.

To było dla mnie świetne doświadczenie w nauce, a przechodzenie przez to wszystko wydawało się wyjaśniać problemy z autouzupełnianiem, które miałem wcześniej. Powiem, że mogło być znacznie gorzej; wciąż mogę rozwijać się dla SharePoint.

 42
Author: James J,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-13 22:49:47

Wpadłem wczoraj do tego samego problemu i udało mi się go rozwiązać. Aby zawęzić to, co zadziałało dla Jamesa, wskażę, co musiałem zrobić. Musiałem dodać przestrzeń roboczą i przełączyć się na uruchamianie xcodebuild z workspace / scheme zamiast project / target.

Użycie workspace / scheme zmusiło xcodebuild do użycia folderu DerivedData zamiast folderu wyjściowego build w głównym projekcie. Dzięki temu linker mógł znaleźć powiązaną bibliotekę statyczną.

This blog post was bardzo pomocny:

Http://blog.carbonfive.com/2011/05/04/automated-ad-hoc-builds-using-xcode-4/

 10
Author: bromanko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-21 14:30:53

Dostałem ten błąd podczas eksperymentowania z plikami dodaję implementację @do ./ align = "left" / plik m pusty. Nie wierzę, że to twój błąd, ale jeśli ktoś inny go zrozumie, może sprawdź, czy tego nie zrobiłeś.

 4
Author: Popeye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-15 11:45:42

Sprawdź, czy nie zaimportowałeś .pliki m w plikach nagłówkowych! Zmieniam się .m do .H naprawił to dla mnie!

 2
Author: nemesis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-25 10:47:15

Nie wiem, czy to zadziała, ale w moim przypadku, miałem więcej niż jeden plik main.m. Wszystko, co musiałem zrobić, to odłączyć jeden z main.m od celu i zadziałało. Upewnij się, że nie masz więcej niż jednego main.m w swoim projekcie.

 2
Author: uneakharsh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-14 13:14:11

Jeśli spojrzysz na dziennik budowy, prosząc o wyświetlenie wszystkich wiadomości, powinieneś zobaczyć krótką linię z napisem " link ..."to ma niewiele w szczegółach. Jeśli jednak klikniesz prawym przyciskiem myszy tę linię I wybierzesz "rozwiń wszystkie transkrypty", otrzymasz bardzo szczegółową linię informującą o tym, jakie polecenie zostało wydane z Xcode.

To powinno pomóc w debugowaniu problemu.

Dave

 1
Author: Dave Stampf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-12 19:33:00

Napotkałem podobny wyjątek, okazało się, że mam jakieś (null) odniesienie w projekcie.pbxproj po tym, jak posprzątam te odniesienia null w projekcie.pbxproj, Budowa wiersza poleceń była sukcesem, podobnie jak wcześniej Xcode. Spójrz na Xcode 4 project: narzędzie do czyszczenia pliku pbxproj? utility-to-clean-up-pbxproj-file

Więcej informacji

 1
Author: laiBilly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:09:26

Nagle mam ten sam problem po czystym, na początku spanikowałem wen oglądałem:

linker command failed with exit code 1 (use -v to see invocation)

... ale okazało się, że naprawa jest naprawdę łatwa, nie jest potrzebna żadna linia poleceń!

Kliknąłem na główny projekt (ten na górze z ikoną schematu z "A") w Nawigatorze, a następnie kliknąłem sekcję projektu (możesz również kliknąć sekcję docelową), a następnie kliknąłem przycisk na dole-środku o nazwie "Validate Settings".

Sam XCode zweryfikował pliki projektu i powiedział mi, że problem polega na zduplikowanej definicji celu i zaproponował, że go naprawi... i voila, problem zniknął!

Powodzenia!
 0
Author: Oscar Salguero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-18 05:22:55

Rozwiązuję problem, przechodząc do "ścieżki wyszukiwania w bibliotece" i upewniając się, że wszystkie wpisy są poprawne.

 0
Author: Paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-31 16:31:52

Osobiście miałem ten problem, gdy opracowywałem static library. Miałem cel static library z całym kodem produkcyjnym i cel testowy, który ściągnął plik MyStaticLib.a jako framework.

Testy przebiegły dobrze w Xcode, ale nie w terminalu używając xcodebuild. Problem polegał na tym, że cel static library kompilował się dla Standard architectures, podczas gdy cel testowy chciał kompilować dla Standard architectures (including 64-bit). Zmiana celu testowego na Standard architectures naprawiła wszystko.

 0
Author: marklar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-07 16:56:16