2011-08-24 8 views
25

Zaczynając od pewnym momencie w przeszłości Xcode 4 w narzekają problemów łącznikowych:Jabłko Mach-O łącznik (id) ostrzeżenie: budynek dla MacOSX, ale powiązanie przeciwko dylib zbudowany dla iOS

ld: warning: building for MacOSX, but linking against dylib built for iOS: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks//CoreGraphics.framework/CoreGraphics

Sprawdziłem wszystko ale wciąż nic podejrzanego w konfiguracji i kompiluje i działa. Jedyne, co widzę to podwójne ukośniki przed CoreGraphics.framework, dlaczego nie wiem. Próbowałem usunąć i dodać ponownie bibliotekę w "Fazach kompilacji", która nie pomogła.

Odpowiedz

-3

Ten problem jest związany z nieprawidłową wersją frameworka w Xcode. Projekt jest zbudowany dla systemu Mac OS X, ale wykorzystuje strukturę wersji iOS.

5

Czasami łatwiej jest debugować problemy Xcode, patrząc na dziennik kompilacji dla linii poleceń, których używa.

Jeśli budujesz z linii poleceń, można uzyskać tę wiadomość, jeśli nie podasz -miphoneos-version-min =

This compiles: 
(where conftest.c just contains int main() {}) 
/Applications/Xcode5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch i386 --sysroot /Applications/Xcode5.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk --sysroot /Applications/Xcode5.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk -miphoneos-version-min=6.0 conftest.c 

And this gives the error: 
/Applications/Xcode5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch i386 --sysroot /Applications/Xcode5.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk --sysroot /Applications/Xcode5.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk conftest.c 
ld: building for MacOSX, but linking against dylib built for iOS Simulator file '/Applications/Xcode5.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/usr/lib/libSystem.dylib' for architecture i386 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
+0

To rozwiązało mój problem, poproś mnie o pyszny upominek. – Gui13

+4

gdzie dodać te thnigs w projekcie Xcode? Kompiluję z Xcode, a nie z wiersza poleceń ... to jest błąd, który dostaję ** ld: budowanie dla symulatora iOS, ale łączenie z dylib zbudowanym dla pliku MacOSX '/usr/lib/libSystem.B .dylib 'dla architektury i386 clang: błąd: polecenie linker nie powiodło się z kodem zakończenia 1 (użyj -v, aby zobaczyć wywołanie) ** istnieje jeden wpis libSystem.B.dylib w sekcji _Others Linker Flat_ .. ale usuwanie to nie rozwiązuje problemu. – Ans

4

Sprawdź ramowa ścieżek wyszukiwania za główny cel i twój cel testowy.

Miałem dużo bzdur w moim.

miał stary projekt napisany w Xcode 4 i po prostu zaczął używać testów jednostek w Xcode 5.

Oto minimalna muszę dostać mój projekt próba uruchomienia

Project Navigator > click on project at top > 
Targets > Build Settings > Framework Search Paths 

TARGET:my_project 
$(inherited) 
"$(SRCROOT)" 
"$(SRCROOT)/my_project" 

TEST:my_projectTests 
"$(SDKROOT)/Developer/Library/Frameworks" <<XCTest.framework is here 
"$(DEVELOPER_LIBRARY_DIR)/Frameworks" 
"$(SRCROOT)/.." 
"$(SRCROOT)"        << Documents/my_project 
"$(SRCROOT)/my_project"     << Documents/my_project/my_project 

where directory structure is 
Documents/my_project 
    my_project.xcodeproj 
    /my_project 

Uwaga: Jeśli przeciągniesz framework do XCode. XCode 5 ma zły zwyczaj hardcoding ścieżkę

/Users/gbxc/Documents/my_project 

powinny być

"$(SRCROOT)"        << Documents/my_project 
"$(SRCROOT)/my_project"     << Documents/my_project/my_project 

więc jeśli przeniósł projekt może mieć problemy

Najlepszym sposobem, aby sprawdzić, co jest poprawne jest stworzenie nowego pojedynczy widok projektu, który uruchamia testy w porządku.

Run the Test action 
By default it fails but at least testing is running 
then compare the Framework Search Paths. 
+0

Zmiana kolejności ram wyszukiwania w obiekcie * Testy naprawiła go dla mnie. Upewnij się, że $ (dziedziczone) nie jest przed "$ (SDKROOT)/Developer/Library/Frameworks". – Marius

0

Jeśli używasz Kartaginę i kompilowania aplikacji Mac, wyszukiwać Framework Search Paths można znaleźć coś swojego projektu jak $(PROJECT_DIR)/Carthage/Build/iOS.

Po usunięciu poprawiono mój problem.