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
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:
- http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/
- https://devforums.apple.com/thread/91711?start=25&tstart=0
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.
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/
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ś.
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!
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.
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
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
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!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.
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.
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