2011-08-24 23 views
25

Bắt đầu từ một số điểm trong Xcode qua 4 trong phàn nàn về vấn đề mối liên kết:của Apple Mach-O liên kết (id) cảnh báo: xây dựng cho MacOSX, nhưng liên kết chống lại dylib xây dựng dành cho 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

Tôi đã kiểm tra tất cả mọi thứ nhưng vẫn không có gì đáng ngờ trong cấu hình và nó biên dịch và chạy. Điều duy nhất mà tôi thấy đó là hai dấu gạch chéo trước CoreGraphics.framework, tại sao tôi không biết. Đã cố xóa và thêm lại thư viện vào "Tạo giai đoạn" không có tác dụng.

Trả lời

-3

Vấn đề này là do bao gồm phiên bản khung sai trong Xcode. Dự án được xây dựng cho Mac OS X, nhưng nó sử dụng khung của phiên bản iOS.

5

Đôi khi việc gỡ rối các sự cố Xcode dễ dàng hơn bằng cách xem nhật ký xây dựng cho các dòng lệnh mà nó đang sử dụng.

Nếu bạn đang xây dựng từ dòng lệnh, bạn có thể nhận được thông báo rằng nếu bạn không xác định -miphoneos phiên bản-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

Điều đó đã giải quyết được vấn đề của tôi, hãy có món quà tuyệt vời của tôi. – Gui13

+4

nơi để thêm các thnigs trong dự án Xcode? Tôi đang biên dịch từ Xcode, không phải từ dòng lệnh ... đây là lỗi tôi nhận được ** ld: xây dựng cho Trình mô phỏng iOS, nhưng liên kết với dylib được tạo cho tệp MacOSX '/usr/lib/libSystem.B .dylib 'cho kiến ​​trúc i386 clang: lỗi: lệnh liên kết không thành công với mã thoát 1 (sử dụng -v để xem lời gọi) ** có một mục nhập libSystem.B.dylib trong phần _Others Linker Flat_ .. nhưng xóa nó không giải quyết được vấn đề. – Ans

4

Kiểm tra của bạn khung Search Paths cho mục tiêu chính của bạn và mục tiêu thử nghiệm của bạn.

Tôi đã có rất nhiều crap trong tôi.

có dự án cũ viết bằng XCode 4 và chỉ mới bắt đầu sử dụng đơn vị xét nghiệm trong XCode 5.

Dưới đây là mức tối thiểu tôi có để có được dự án thử nghiệm của tôi để chạy

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 

Lưu ý: Nếu bạn kéo khung vào XCode. XCode 5 có thói quen xấu của thể xác định rõ con đường

/Users/gbxc/Documents/my_project 

nên

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

vì vậy nếu bạn di chuyển dự án của bạn có thể nhận được vấn đề

Cách tốt nhất để kiểm tra whats đúng là để tạo ra một mới xem một dự án chạy thử nghiệm ok.

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

Thay đổi thứ tự khung tìm kiếm trong * Mục tiêu thử nghiệm đã sửa nó cho tôi. Đảm bảo rằng $ (thừa hưởng) không phải trước "$ (SDKROOT)/Nhà phát triển/Thư viện/Khung". – Marius

0

Nếu bạn đang sử dụng Carthage và biên soạn một ứng dụng Mac, tìm về dự án của bạn Framework Search Paths bạn có thể tìm thấy cái gì đó như $(PROJECT_DIR)/Carthage/Build/iOS.

Xóa sự cố đã khắc phục được sự cố của tôi.

Các vấn đề liên quan