2011-06-09 6 views
16
d /Users/yariksmirnov/Library/Developer/Xcode/DerivedData/Goozzy-cugjuvvsrzjqwvfiicxtykbqagux/Build/Products/Debug-iphonesimulator/Goozzy.app/Goozzy normal i386 
cd /Users/yariksmirnov/Desktop/Goozy/branches/new 
setenv MACOSX_DEPLOYMENT_TARGET 10.6 
setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" 
/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-gcc-4.2 -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk -L/Users/yariksmirnov/Library/Developer/Xcode/DerivedData/Goozzy-cugjuvvsrzjqwvfiicxtykbqagux/Build/Products/Debug-iphonesimulator -F/Users/yariksmirnov/Library/Developer/Xcode/DerivedData/Goozzy-cugjuvvsrzjqwvfiicxtykbqagux/Build/Products/Debug-iphonesimulator -filelist /Users/yariksmirnov/Library/Developer/Xcode/DerivedData/Goozzy-cugjuvvsrzjqwvfiicxtykbqagux/Build/Intermediates/Goozzy.build/Debug-iphonesimulator/Goozzy.build/Objects-normal/i386/Goozzy.LinkFileList -mmacosx-version-min=10.6 -Xlinker -objc_abi_version -Xlinker 2 -D__IPHONE_OS_VERSION_MIN_REQUIRED=40300 -framework CoreData -lz.1.2.3 -framework MobileCoreServices -framework SystemConfiguration -framework CFNetwork -framework QuartzCore -framework UIKit -framework Foundation -framework CoreGraphics -o /Users/yariksmirnov/Library/Developer/Xcode/DerivedData/Goozzy-cugjuvvsrzjqwvfiicxtykbqagux/Build/Products/Debug-iphonesimulator/Goozzy.app/Goozzy 

*ld: library not found for -lz.1.2.3* 
collect2: ld returned 1 exit status 
Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-gcc-4.2 failed with exit code 1 

Jak naprawić ten błąd?Błąd Linker w Xcode 4.2 Podgląd programisty

To bardzo dziwne - kompiluję kompilację dla systemu iOS, ale otrzymuję błąd dotyczący docelowego wdrożenia systemu Mac OS.

Odpowiedz

3

Zaktualizuj wersję libz dylib w definicji projektu do tego, co zapewnia Twój XCode 4.2. Jeśli kompilujesz ten sam kod dla różnych celów, sprawdź wersję biblioteki na każdym z nich.

Od wersji SDK 3.2 wszystkie wersje libz są dowiązaniami symbolicznymi do ostatniej wersji (libz.1.2.3 w SDK 4.3), więc niezależnie od wersji libz, którą wybierzesz, otrzymasz ostatnią. Zobacz /Developer/Platforms/iPhoneOS.platform/DeviceSupport/Latest/Symbols/usr/lib.

Nie wiem, co Apple zrobi w przyszłości. Jeśli łączysz się z libz, najprawdopodobniej będziesz nadal łączył się z najnowszą wersją. Zmiana głównej biblioteki (libz-X) może naruszyć kompatybilność, więc bezpieczniejszym wyborem jest utrzymywanie połączenia z tą samą wersją, którą masz teraz. Twój wybór.

43

Powinieneś połączyć libz.dylib żadnej konkretnej wersji. Właściwa wersja zostanie użyta automatycznie.

+0

Ta odpowiedź zostałaby znacznie poprawiona, gdybyś mógł wskazać odpowiednie dokumenty, które wskazują na linkowanie do dylib specyficznych dla wersji, automatycznie użyje najnowszego. – memmons

+3

Używanie dowiązań symbolicznych do zamaskowania zmian mniejszych zmian wersji jest konwencją używaną tak długo, jak długo istnieją biblioteki współdzielone. Jest wszechobecny i pradawny. Równie dobrze możesz zapytać, gdzie znajduje się dokumentacja definiująca/jako domyślny separator ścieżek - jestem pewien, że jest zakopana gdzieś w głębi jakiegoś standardu UNIX, ale nie sądzę, że jest to szczególnie pouczające, aby dodać do tej odpowiedzi. Zapraszam do edycji mojej odpowiedzi, jeśli chcesz poświęcić czas na kopanie. – Jim

+1

Dzięki za wyjaśnienie. Pytam, ponieważ - nie pochodząc z tła w C++ - myślałem, że może to być specyficzne dla Xcode. Przy okazji, już przegłosowałem odpowiedź. – memmons