Lỗi xây dựng - thiếu kiến ​​trúc bắt buộc i386 trong tệp


105

Tôi gặp lỗi này khi xây dựng ứng dụng iPhone của mình:

ld: warning: in /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit, thiếu kiến ​​trúc bắt buộc i386 trong tệp

Nó cũng giống như vậy đối với tất cả các khuôn khổ trong ứng dụng của tôi. Nó rất kỳ lạ vì điều này đã không xảy ra trước đó.


Điều này có xảy ra sau khi bạn cài đặt Snow Leopard và iPhone SDK mới (Xcode 3.2) không?
avocade 28/09/09

8
Câu trả lời của tôi khắc phục được sự cố. Hãy kiểm tra.
Jordan

9
Một khả năng khác không được thảo luận trong các câu trả lời là bạn sẽ gặp lỗi này nếu bạn đã thêm tham chiếu vào một khuôn khổ không phổ quát (tức là bạn đã thêm một khuôn khổ armv6 / armv7 và sau đó cố gắng thực hiện một bản dựng giả lập). Đây chủ yếu là mối quan tâm nếu bạn đang xây dựng các khung tùy chỉnh của riêng mình.
aroth

@aroth cũng đúng, vui lòng kiểm tra câu hỏi
ArkReversed

Câu trả lời:


131

Điều này xảy ra khi bạn thêm một khuôn khổ vào dự án của mình và vô tình sao chép khuôn khổ đó vào thư mục dự án của bạn.

Cách khắc phục là kiểm tra thư mục dự án của bạn (nơi bạn lưu trữ dự án của mình trên đĩa) để tìm bất kỳ tệp iPhone SDK * .Framework nào và xóa chúng.

Dự án sẽ xây dựng tốt sau đó.


4
ngoài ra, hãy kiểm tra nó trên Thiết bị iOS thay vì Trình mô phỏng.
Raptor

Nếu bạn có một khung công tác khác thì việc sửa đổi tệp dự án dường như cũng xóa các tham chiếu đến đó, điều này đã hoạt động tho và dễ dàng hơn, cảm ơn Jordan
texian 12/02

Không làm việc cho tôi. Không có tệp .framework trong thư mục dự án của tôi. Fwiw, tôi đã dọn dẹp và sau đó xây dựng và vấn đề này bắt đầu. Sự sạch sẽ bằng cách nào đó phải có những thứ bị hỏng.
Alyoshak

85

Tôi đã gặp vấn đề tương tự và giải pháp hóa ra là một cách khắc phục dễ dàng. Sao lưu sau đó mở project.pbxproj (nằm bên trong gói tệp dự án của bạn) trong TextMate hoặc TextEdit và tìm kiếm phần có tiêu đề "/ * Bắt đầu phần XCBuildConfiguration * /". Tìm một khóa có tên FRAMEWORK_SEARCH_PATHS và xóa nó và nội dung của nó (một lần cho mỗi cấu hình bản dựng, vì vậy tôi đã xóa nó ở hai nơi). Đây là một ví dụ về những gì tôi đã xóa:

FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library/Frameworks\"",);

Dự án của tôi hiện xây dựng cho cả thiết bị iPhone và iPhoneSimulator.


2
Tôi có thể xác minh rằng điều này hoạt động như mô tả. Có vẻ như Xcode có thể dễ dàng mất liên lạc với siêu dữ liệu của nó khi di chuyển các proj Xcode giữa các máy tính khác nhau; trong trường hợp này với một cái có 3.0 và Leopard, và 3.1 và Snow Leopard khác được cài đặt. Siêu dữ liệu FRAMEWORK_SEARCH_PATHS hiển thị trống trong Cài đặt bản dựng trong khi dự án thực tế.pbxproj có nội dung trong đó.
avocade 28/09/09

1
Đồng ý FRAMEWORK_SEARCH_PATHS cũng hiển thị trống trong cài đặt xây dựng cho tôi. Tuy nhiên, chỉnh sửa thủ công tệp project.pbxproj như được mô tả đã khắc phục sự cố.
Alasdair Allan

11
Điều này đã không làm việc cho tôi. TUY NHIÊN, bạn dẫn tôi đến đúng nơi để tìm. .Pbxproj của tôi không có khóa FRAMEWORK_SEARCH_PATHS mà là một khóa có tên LIBRARY_SEARCH_PATHS.
nổi loạn

Tôi thứ hai @rebellion. Có lẽ các phiên bản XCode mới hơn đã thay đổi tên khóa.
Moshe

Cảm ơn, tôi cũng có một khóa LIBRARY_SEARCH_PATHS bị thất lạc trong tệp pbxproj của mình. Khóa xuất hiện bằng chữ in đậm trong Cài đặt dự án trong Xcode 3, nhưng không có giá trị. Điều này khiến tôi tin rằng có điều gì đó không ổn. Tôi đã mở dự án trong Xcode 4 Preview 5 một lần, sau đó điều này đã xảy ra.
mvexel

43

Điều đã xảy ra ở đây là Xcode đã thêm một mục "Đường dẫn tìm kiếm khung" một cách bí ẩn trỏ đến một SDK thiết bị iPhone cụ thể. Ví dụ: của tôi gần đây đã được đặt thành:

$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/System/Library/Frameworks

Điều này dẫn đến việc trình biên dịch tìm thấy các khung có kiến ​​trúc không chính xác. Xóa bất kỳ giá trị nào trong khóa "Đường dẫn tìm kiếm khung" trong cài đặt xây dựng của mục tiêu sẽ giải quyết được sự cố.


đây là vấn đề trong trường hợp của tôi. nó đã thêm một loạt các thư mục tìm kiếm mỗi khi tôi thêm một thư viện mới. ngay cả khi tôi xóa tham chiếu mục nhập thư mục tìm kiếm từng ở đó đã gây ra sự cố.
darshansonde

"Đường dẫn tìm kiếm khung" đã trống trong trường hợp của tôi. Lỗi chính xác mà tôi gặp phải là ld: building for iOS Simulator, nhưng liên kết với dylib được xây dựng cho tệp MacOSX '/usr/lib/libSystem.B.dylib' cho kiến ​​trúc i386 clang: error: lệnh linker không thành công với mã thoát 1 ( sử dụng -v để xem lời gọi) Tôi đang sử dụng SDK 7.0 trên Mavericks.
Trả lời

Tôi đã gặp lỗi tương tự, tôi đã xóa các giá trị khỏi đường dẫn tìm kiếm khung trong Cài đặt xây dựng và bây giờ nó biên dịch thành công.
Nirav

10

Tôi chỉ muốn đề cập đến điều đó trong XCode nếu bạn đi tới "Chỉnh sửa Cài đặt Dự án" và tìm "Đường dẫn Tìm kiếm" Có một trường dành cho "Đường dẫn Tìm kiếm Khung". Cập nhật điều này sẽ khắc phục sự cố mà không cần phải hack tệp dự án!

Chúc mừng!

Jesse


Tôi có cùng một vấn đề khiến tôi hoàn toàn phát điên. Có vẻ như các bạn đã biết giải pháp nhưng tôi không thể tìm thấy tệp "project.pbxproj" và Không thể tìm thấy "Chỉnh sửa Cài đặt Dự án" nằm ở đâu.
saman01

2
Trong XCode 4.2.1, tôi tìm thấy điều này như sau: nhấp vào tên dự án trong Project Navigator. Trong màn hình thuộc tính xuất hiện, hãy chọn tab 'Cài đặt bản dựng'. Đường dẫn tìm kiếm nằm trong màn hình này. Xóa chúng đã làm việc cho tôi.
dsteele

8

Kiểm tra để đảm bảo rằng bạn đã không sao chép khuôn khổ vào dự án của mình khi bạn thêm nó. Nếu bạn đã sao chép nó, nó không thể tìm thấy các đường dẫn ban đầu. Để khắc phục sự cố này. Xóa khung công tác AVFoundation khỏi thư mục khung công tác trong dự án của bạn, sau đó thêm lại, nhưng lần này, hãy đảm bảo rằng bạn không đánh dấu kiểm tra bản sao.

CÁi này đã sửa nó giúp tôi!


8

Tôi đã sửa nó theo một cách khác. Lý do tại sao tôi gặp lỗi này là tôi đã thêm security.framework hai lần trong dự án của mình. Tôi không thể thấy khung bảo mật trong xcode, tôi đã mở dự án trong trình tìm kiếm và tìm thấy khung này tôi đã xóa và vấn đề đã được giải quyết.


7

Nếu ứng dụng của bạn được sử dụng để chạy trên thiết bị, hãy đảm bảo rằng bạn không cố chạy ứng dụng đó trên trình mô phỏng. Nghe có vẻ rõ ràng, nhưng hãy kiểm tra.


5

Mặc dù có thể có thứ gì đó đã bị xóa, nhưng theo kinh nghiệm của tôi thì có điều gì đó đã bị trục trặc trong tệp dự án. Tôi vẫn chưa xác định được "cái gì đó" là gì. Tôi đã gặp sự cố tương tự khi cài đặt SDK vẫn ổn. Có một vài sự lựa chon.

Đầu tiên, hãy thêm tất cả các tệp của bạn vào một dự án mới. Điều này dường như thường hoạt động. Đó là một nỗi đau.

Thứ hai, bạn có thể nhấp chuột phải vào dự án trong XCode / Get Info / Build / Library Search Paths. Thêm các đường dẫn mới tương tự như /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/lib. Thêm các phiên bản thích hợp của chuỗi đó cho từng phiên bản (2.2.1, v.v.) và nền tảng (trình mô phỏng hoặc iPhoneOS). Thực hiện hành động tương tự đối với Đường dẫn tìm kiếm theo khung nếu các khung là vấn đề của bạn.

Thứ ba, công việc nhiều hơn nhưng đáng tin cậy hơn, là mở project.pbxproj từ bên trong MyProject.xcodeproj (Textmate là tốt cho việc này). Tìm kiếm "/ * Bắt đầu phần XCBuildConfiguration * /", sau đó "LIBRARY_SEARCH_PATHS" và "FRAMEWORK_SEARCH_PATHS". Thêm hoặc sửa đổi các đường dẫn nếu thích hợp và lưu tệp.

Trong mọi trường hợp, một cơn đau ở mông, và tôi chắc chắn muốn xác định rõ nguyên nhân vì tôi đã từng xảy ra một vài lần. Dự án xây dựng tốt, sau đó chỉ lên và từ chối làm như vậy với những gì có vẻ là ít lý do.


Tôi sẽ bắt đầu một dự án mới. Ôi giếng.
Gabe Shahbazian 23/09/09

Bạn có thể sửa cài đặt xây dựng "Đường dẫn tìm kiếm theo khung" từ bảng thông tin của mục tiêu.
John Cromartie 23/09/09

Tôi gặp lỗi nhưng không gặp phải các vấn đề về khung được mô tả ở trên. Thật kỳ lạ, trên một máy tính, dự án có thể được kiểm tra khỏi SVN và được xây dựng tốt, trong khi trên hai máy tính khác, nó đột nhiên dẫn đến lỗi này trên mọi bản dựng. Cách khắc phục duy nhất (và khá đơn giản) - sau khi thử tất cả các loại giải pháp khác - là tạo một dự án trống mới và di chuyển tất cả các tệp vào đó.
mmattke

Phương pháp này đã làm việc cho tôi. Một ngày nọ, tôi có một bộ dự án đang hoạt động đột ngột ngừng xây dựng cho đúng một cấu hình. Không có lý do. Đã sử dụng kỹ thuật textmate ở trên và nhận thấy rằng "$ (SDKROOT) / Developer / Library / Frameworks" bị thiếu trong cấu hình đó. Không hiểu tại sao và tôi không thể thấy điều này bằng Xcode.
Rob

4

"Chỉnh sửa Cài đặt Dự án" và tìm "Đường dẫn Tìm kiếm" Có một trường dành cho "Đường dẫn Tìm kiếm Khung". xóa hết!!


4

Nó cũng chỉ xảy ra ở đây với tôi. Cảm ơn một đối tác tuyệt vời, chúng tôi đã tìm thấy câu trả lời. Xcode của bạn có thể đang trỏ tới trình mô phỏng .. thay vào đó hãy thay nó sang thiết bị IOS .. được xây dựng trơn tru sau khi ....


1

Chạy lệnh tệp trên khung từ Terminal:

file /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit

Bạn sẽ nhận được thông báo cho bạn biết kiến ​​trúc mà tệp nhị phân UIKit tương thích với. Nếu bạn không thấy "i386" được liệt kê, thì bằng cách nào đó bạn đã xóa phiên bản i386 của UIKit, điều này có nghĩa là bạn không thể xây dựng cho trình mô phỏng. Để khắc phục điều đó, bạn sẽ phải cài đặt lại SDK.

Nếu bạn gặp một số lỗi khác, hy vọng nó sẽ giúp bạn tìm ra vấn đề thực sự là gì.


Đã cài đặt lại sdk và tôi vẫn gặp lỗi xây dựng chính xác như nhau.
Gabe Shahbazian 22/09/09

tôi đang gặp vấn đề này. khuôn khổ và đường dẫn thư viện đã được kiểm tra và chúng sạch sẽ. tệp lệnh /Developer/Platforms.../UIKit.framework/UIKit chỉ cho biết "nhánh thư viện chia sẻ được liên kết động Mach-O". có thực sự cần thiết để cài đặt toàn bộ SDK không ?, hay tôi có thể sao chép phiên bản đầy đủ của khung?
Alexander Fradiani

Tốt để học! đối với trường hợp của tôi, armv7 và i386 ở đó, nhưng không có armv6!
Nianliang

1

Tôi chỉ muốn cho bạn biết rằng Trong trường hợp của tôi, tôi đang gặp vấn đề tương tự, tôi nhận ra rằng tôi có một thư mục Xcode cũ hơn có tên là Xcode3.1.3 Tôi chỉ đổi tên nó vì nó là phiên bản cũ hơn và điều đó đã làm nên điều kỳ diệu đối với tôi.


1

Kiểm tra đường dẫn tìm kiếm thư viện của bạn trong cài đặt mục tiêu của bạn. Đôi khi các thư viện ngốc nghếch được nhập vào đó và điều này sẽ gây ra lỗi tương tự cho bạn.

Bạn có thể xóa tất cả các mục trong phần này.


0

Tôi vừa gặp phải điều gì đó hơi khác một chút, vì tôi làm việc trên thư viện của riêng mình (WM_GSRecognizerLib), nhưng lỗi vẫn vậy.

Điều gì sẽ xảy ra: do một số bản cập nhật, đường dẫn nhắm mục tiêu lib để bao gồm (.a) là từ thư mục "Gỡ lỗi-iphoneos" (nơi nó được tạo). Biên dịch cho các thiết bị iOS chung hoạt động tốt, nhưng không cho trình mô phỏng, phàn nàn về kiến ​​trúc i386 bị ​​thiếu.

Những gì tôi đã làm cho vấn đề này, là cũng bao gồm các tệp nhị phân từ thư mục "Debug-iphonesimulator".

Nó có thể giúp ích cho chủ đề này, vì giải thích ở đây: thiết bị yêu cầu mã nhị phân cho arm64 / armv7 / armv7s, trong khi trình mô phỏng cần i386.


0

Giải pháp của tôi là đặt trên gỡ lỗi mục tiêu giả lập CÓ, chỉ cần nhìn vào trạng thái git để xem dòng mới được thêm vào dưới dạng kiến ​​trúc chỉ trên .project. nếu bạn không đặt điều này, bản dựng sẽ chạy đến tất cả các kiến ​​trúc và sẽ hiển thị một số kiến ​​trúc bị thiếu như i386 hoặc khác. LƯU Ý RẰNG rõ ràng vấn đề chính là sử dụng một số khuôn khổ triển khai một số loại kiến ​​trúc cụ thể.


-1

Tôi cũng gặp phải lỗi tương tự khi sử dụng xcode phiên bản 4.0.2 vì vậy những gì tôi đã làm là chọn tệp dự án xcode và từ họ, tôi đã chọn tùy chọn Target của họ, tôi có thể thấy ứng dụng của dự án của mình nên tôi đã nhấp vào nó và đi đến bản dựng tùy chọn cài đặt.

Họ trong tùy chọn tìm kiếm tôi đã nhập đường dẫn tìm kiếm Framework , và xóa tất cả các cài đặt, sau đó nhấp vào nút xây dựng và điều đó làm việc tốt cho tôi,

Cảm ơn và Trân trọng

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.