Lỗi liên kết Apple Mach-O khi biên dịch cho thiết bị


238

Tôi vừa mới nâng cấp lên xcode 4.0 và tôi không còn có thể triển khai lên iPhone nữa, tôi gặp phải Lỗi liên kết Apple Mach-O, mặc dù vậy nó vẫn hoạt động cho trình giả lập.

    Ld /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel normal armv7
    cd /Users/yveswheeler/iParcel
    setenv IPHONEOS_DEPLOYMENT_TARGET 3.2
    setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -L/Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos -F/Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos -filelist /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel.LinkFileList -dead_strip -all_load -ObjC -lxml2 -miphoneos-version-min=3.2 -framework UIKit -framework CoreGraphics -framework QuartzCore /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Core.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Network.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Style.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UI.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UICommon.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UINavigator.a -framework AddressBook -lz.1.2.3 -framework Foundation -framework CFNetwork -framework MobileCoreServices -framework SystemConfiguration -framework MessageUI -framework AudioToolbox -o /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel

arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Core.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Network.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Style.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UI.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UICommon.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UINavigator.a: No such file or directory
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 failed with exit code 1

37
Cái quái gì thế?! Vì vậy, nhiều vấn đề khác nhau cho cùng một thông báo lỗi. Làm tốt lắm Apple!
Iulian Onofrei

17
"LRI: Đã xảy ra lỗi" sẽ hữu ích hơn :))
Aviram Netanel

Nhìn vào các cảnh báo mà Trình liên kết phun ra trước khi xảy ra lỗi; nó có thể dẫn đến một giải pháp tốt hơn / cụ thể hơn.
Pro Q

Câu trả lời:


216

Đây là giải pháp vĩnh viễn. Dự án ghi đè chung có thể gây ra sự tăng sinh này. Hãy thử phương pháp này.

-UPDATE - Lỗi Clang - Lỗi trình liên kết Mach-O

Trong một số trường hợp, cửa sổ nhật ký lỗi hiển thị lỗi .xctest, để khắc phục

-> Chọn dự án của bạn

-> Bên cạnh này (ngay trước tab Chung), hãy chọn tệp projectTest của bạn từ danh sách thả xuống

-> Có một tùy chọn (như ProjNameTests)

-> Trong Ứng dụng máy chủ, chỉ chọn dự án của bạn từ danh sách thả xuống nếu nó hiển thị tùy chỉnh

LÀM XONG!

nhập mô tả hình ảnh ở đây

Phương pháp cũ đã xóa


4
Nếu tôi xóa đường dẫn tìm kiếm Khung hơn tôi sẽ không thể tìm thấy tệp tiêu đề
Danpe

62
Tôi nghĩ rằng tôi không nhận được nó. Tôi nên làm gì…?
fabian

1
@fabian Chỉ cần bỏ qua và thử giải pháp thay thế :-)
Gajendra K Chauhan

4
Cứu người đàn ông ngày của tôi. Ngồi trước sếp của tôi, phải cho anh ta xem ứng dụng tôi đang làm việc và tôi đã gặp lỗi liên kết này. Tôi đã đi nếu không hạ cánh ở đây: D
Saraz

2
ứng dụng máy chủ ở đâu trong bước cuối cùng?
Kartiikeya

195

Tôi có cùng một vấn đề và vấn đề là tôi đã vô tình nhập một tệp .m thay vì .h trong một tệp thực hiện - hy vọng nó sẽ giúp


1
Không thể tìm thấy lỗi! Chỉ cần thử từng giải pháp
AsifHabib 17/12/14

Điều này không đúng, tôi đã thử điều tương tự trong một dự án mới và vẫn gặp lỗi tương tự.
Hemang

Chuyển đến phần Cài đặt dự án và xây dựng các giai đoạn, đảm bảo bạn không có tệp .m trong phần "Sao chép tài nguyên gói" thay vì "Nguồn biên dịch". điều đó làm việc cho tôi
LuAndre

Không thể tìm ra giải pháp. Tôi không biết mình sẽ làm gì ...
Markus

Bạn đã cứu cuộc đời tôi. Cảm ơn bạn rất nhiều!
Isaac

73

Chỉ cần chạy vào cùng một vấn đề.

Giải pháp (cho tôi) = kiểm tra khuôn khổ của bạn.

Trong trường hợp của tôi, tôi đã thêm các lớp liên quan đến CoreData mà không có "CoreData.framework". Thêm nó đã giải quyết khiếu nại Mach_O.


6
Nó cũng xảy ra khi bạn liên kết lại một thư viện không có trong bản phát hành SDK mới nhất. Giả sử bạn đã liên kết với libz.1.2.3 và sdk bao gồm 1.2.5. Kiểm tra khuôn khổ của bạn là một gợi ý thực sự tốt! Cảm ơn bạn Dante!
SlowTree

Cảm ơn SlowTree, lưu đề xuất đã giải quyết trải nghiệm của tôi với sự cố liên kết này. libz.1.2.3 đến libz.1.2.5;
Tom Pace

2
Cocoapods đã liên kết hai libPods.atệp cho tôi (do đó là các ký hiệu trùng lặp). Cảm ơn, Dante!
Nick Merrill

Đúng. Đã xóa các tệp .a và thêm lại từ trình liên kết. Nó đã làm việc!
Balasubramanian

61

mở tệp .xcworkspace không .xcodeproj. Tôi lặp lại mở tệp .xcworkspace. Tất cả các lỗi của bạn sẽ biến mất.


1
Wow, đó phải là một trong những thông báo gỡ lỗi điên rồ nhất. Tôi thực sự sẽ không bao giờ đoán rằng đây là lý do dựa trên thông điệp được cung cấp.
Joseph Casey

1
Đã lừa tôi vì có một thư viện bên ngoài không được bao gồm trong .xcodeproj. phải làm với cocoapods
Sjoerd de Wit

Điều này làm việc cho tôi. Giống như @SjoerddeWit đã nói - bao gồm cocoapods bắt buộc phải mở .xcworkspace chứ không phải .xcodeproj.
Cody Richmond

Cứu ngày của tôi! +1
Bruno Monteiro

Tôi đã xuất một dự án hợp nhất sang xcode và không có tệp .xcworkspace
Ayush Malviya

36

Re: Vấn đề như được nêu trong tiêu đề:

Chỉ trong trường hợp bất cứ ai khác bỏ lỡ rõ ràng ...

Tôi đã gặp lỗi này sau khi cài đặt phiên bản Xcode4 mới và kéo các tệp hiện có vào một dự án mới. Tôi đã không phát hiện ra rằng hộp kiểm 'thêm vào mục tiêu' bị bỏ chọn trong hộp thoại 'Chọn tùy chọn để thêm tệp:'. Sửa lỗi thiếu sót của tôi trong Mục tiêu> Xây dựng giai đoạn> Nguồn biên dịch đã giải quyết vấn đề.


Thủ thuật này làm việc cho tôi. cảm ơn. Tôi đã xóa tất cả các thư mục biên dịch và xây dựng lại dự án.
Vivek Gyaneshwar

34

Menu> Sản phẩm> Sạch sẽ, đây là những gì làm cho nó hoạt động. Tôi không chắc chắn về những người khác. Tôi đã thêm pic để hiển thị.

nhập mô tả hình ảnh ở đây


1
Tuyệt vời. Cho đến nay, giải pháp đơn giản nhất tôi có thể tìm thấy.
Vincent van Leeuwen

29

Lỗi kỳ quái. Đối với tôi, tôi chỉ cần dọn dẹp và khởi động lại Xcode và vấn đề đã biến mất.



24

Không có câu trả lời nào trong số này giúp tôi. Sau đó, tôi đã cố gắng cài đặt lại Cocoapods:

pod deintegrate

pod install

Vấn đề được giải quyết!


Tôi không chắc chắn việc ngắt kết nối với pod & xcode ở đâu nhưng thường thì đó là một cuộc đấu tranh để đảm bảo các tệp pod được chuyển đến thư mục originData. Điều này dường như để khắc phục vấn đề đó. Tôi ước tôi có thể bắt đầu câu trả lời này ..
Jacksonkr

20

Vấn đề là ở XCode 4, các phụ thuộc không đảm nhận các cài đặt kiến ​​trúc của dự án chính, như trước đây chúng đã làm trong XCode 3. Tôi đã phải trải qua tất cả các phụ thuộc của mình để đặt chúng cho kiến ​​trúc chính xác.


2
cảm ơn bạn! Tôi đã hoàn thành sai lầm khi thông báo lỗi từ trình liên kết phàn nàn về "Tệp không tìm thấy", không phải "Tệp được tìm thấy, nhưng tôi không thể sử dụng nó ...", và đang lang thang trong các cài đặt xcode tìm kiếm thư viện đường dẫn. Nhưng điều này làm việc cho tôi. Và nếu bạn gặp phải vấn đề này, bài đăng khác này cũng có liên quan: stackoverflow.com/questions/2999844/three20-and-ios-4 . Ngoài ra, blog tóm tắt tốt đẹp này: amirnaor.com/?p=112
Rob

13

Tôi đã có cùng và quản lý để giải quyết nó.

Trong tùy chọn xcode , tab vị trí thay đổi giá trị theo vị trí xây dựng thành " Place build products in locations specified by targets".


Cảm ơn Wolfert, đã thử nhưng vẫn có 1250 Cảnh báo liên kết Apple Mach-O và không có tiến triển. Bạn đã làm gì khác để khắc phục điều này? Chúc mừng

Cảm ơn Wolfert! bạn đã tiết kiệm rất nhiều thời gian của tôi.
Sunil Targe

6
Tùy chọn không khả dụng trong XCode 5.1
Hemang 4/11/2016

13

Tôi đã vật lộn với điều này trong một thời gian và trong trường hợp của tôi, nó đã trở thành Cài đặt xây dựng trong Đường dẫn tìm kiếm được gọi là FRAMEWORK_SEARCH_PATHS. Nó giúp tôi chọn nút "Levels", dường như so sánh các cài đặt dự án, mục tiêu và "Đã giải quyết" của tôi. Tôi thấy rằng cài đặt mục tiêu của mình bằng cách nào đó đã vượt qua mặc định của "$ (được kế thừa)" và giá trị bị ghi đè là những gì XCode đã "giải quyết" cài đặt. Khi tôi loại bỏ ghi đè, trong trường hợp này đã chỉ định 3,2 sdk, các lỗi liên kết đã biến mất - cũng như một số cảnh báo gần đây xuất hiện về bất kỳ lớp nào mà tôi gọi là phương thức hậu 4.0.

Về những cảnh báo đó - Tôi chưa bao giờ thấy chúng trước khi tôi thêm khung MessageUI cho một thay đổi gần đây. Tôi nghi ngờ, nhưng không biết chắc chắn, khi tôi thêm khung đó, XCode đã cố gắng làm điều gì đó thông minh bằng cách thêm ghi đè đó vào mục tiêu của tôi. Tôi đã không làm điều đó rõ ràng tại bất kỳ điểm nào. Các cảnh báo, ví dụ, về phương pháp NSBL URLByAppendingPathComponent, không xuất hiện cho đến khi sdk 4.0. Trước khi thêm khung MessageUI, tôi không bao giờ nhận được cảnh báo đó. Và vì tôi đã loại bỏ ghi đè, tôi không còn nhận được chúng nữa.



8

Thay đổi "Chỉ xây dựng kiến ​​trúc hoạt động" thành Có trong CordovaLib.xcodeproj -> Cài đặt bản dựng đã giúp tôi. trước đó ứng dụng đã chạy trên trình giả lập, nhưng không phải trên thiết bị.


7

Bạn có thể cần cập nhật cài đặt bản dựng.

Xác minh phiên bản mục tiêu iOS và kiến ​​trúc bộ xử lý, vì bạn có thể không có SDK cũ với XCode 4.

Bạn có thể thấy «Thiếu SDK» trên cài đặt bản dựng. Thay đổi điều đó thành bất cứ điều gì áp dụng.


Đó là điều đầu tiên tôi làm mỗi khi nâng cấp xcode. Lần này không phải là vấn đề.
CodeVomit

7

Tôi gặp vấn đề tương tự: chỉ vô tình xóa một tập tin .m, trong khi .h nằm trong dự án. Sự cố đã biến mất khi tôi khôi phục tệp .m.


6

Kiểm tra để đảm bảo rằng bạn không có đường dẫn tìm kiếm khung cụ thể được chỉ định. nếu bạn đi đến thông tin trên mục tiêu và chỉ cần loại bỏ các mục nhập đường dẫn tìm kiếm khung thì nó sẽ sử dụng mặc định cho phiên bản triển khai đã chỉ định của bạn.


5

Tôi chỉ cố gắng tạo một category classtập tin và gặp vấn đề kỳ lạ này..và cuối cùng ....

Cách sai để tạo lớp thể loại gây ra vấn đề:

New File-> Cocoa Touch-> Objective-C class, sau đó tôi đổi tên các tập tin để loại lớp như tên .. (ví dụ OriginalClass_CategoryName.h/mđểOriginalClass+CategoryName.h/m , và cũng có thể sửa đổi các nội dung trong file).

Đúng đường ở đây:

New File-> Cocoa Touch-> Objective-C categoryvà nó sẽ tự động tạo tệp ( OriginalClass+CategoryName.h/m).

Ôi, tôi thật ngu ngốc !!


5

Nếu bạn đang sử dụng CoreData và bạn sử dụng XCode để tạo các lớp con NSManagedObject cho các thực thể của mình, hãy đảm bảo bạn chỉ tạo một cho mỗi thực thể.

Vấn đề của tôi là nó đã tạo ra nhiều lớp con NSManagedObject cho cùng một thực thể (và đặt chúng vào các thư mục khác nhau).

Tôi vừa xóa tất cả chúng và tạo lại các lớp con NSManagedObject.


5

Để thêm vào danh sách những thứ kỳ lạ đã khắc phục vấn đề này ...

Tôi đã có một số biến CGFloat trong tệp tiêu đề toàn cầu như vậy

const NSInteger  globalInteger1 = 2;
const NSInteger  globalInteger2 = 3;

Khoảnh khắc tôi gỡ bỏ những thứ này, tất cả đều ổn :)


1
Vấn đề WEIRD của tôi là ở tệp .pch hoặc constants.h Tôi đã khai báo một hằng số là NSString * const kInitiaNotification = @ "kInitialNotification"; mà không đề cập đến "tĩnh" lúc đầu
Mazen Kasser

Tôi có vấn đề này ngay sau khi tôi đã thay đổi từ NSString static *key = @"someKey"đếnconst NSString *key = @"someKey"
tonytony

5

Tôi có cùng một vấn đề chính xác chỉ vì tôi có hai hằng số giống nhau trong các lớp khác nhau. Bạn cũng có thể gặp sự cố này nếu bạn nhập tệp .m không phải tệp .h


Bạn tiết kiệm trong ngày của tôi !!
teck wei

@teckwei bạn có thể nhấn Upvote mũi tên: D
Adela Toderici


4

Tôi đã có cùng một vấn đề, và tôi đã giải quyết nó. Trong trường hợp của tôi, cài đặt "kiến trúc" gây ra sự cố. Trong tệp dự án của tôi, tab Build Settings, Architectures được đặt thành armv6. Tôi đã thay đổi nó thành Standard (armv7), làm sạch và xây dựng. Sau đó, nó làm việc!


4

Trong trường hợp của tôi, vấn đề là có các kiến ​​trúc khác nhau được chỉ định theo các mục tiêu khác nhau. Tôi đã xây dựng mục tiêu ứng dụng của mình với armv6, armv7 và cocos2d với Standard (amrv7). Đi vào cài đặt xây dựng và đảm bảo kiến ​​trúc của bạn đồng ý cho tất cả các mục tiêu.


4

Tôi đã giải quyết vấn đề này quá kỳ lạ!

Chuyển đến Target > Build Phase > Liên kết nhị phân với các thư viện :

Xóa tất cả các khung của bạn và thêm chúng một lần nữa!

Hi vọng nó sẽ giúp ích cho bạn !


Giải pháp khá khủng khiếp
SleepsOnNewspapers

Không thể trả lời ... không logic lắm
LKM

Tôi đã kiểm tra thông báo lỗi và thấy rằng đó là một trong các khung công tác, vì vậy tôi đã xóa khung đó và thêm lại, không phải tất cả các khung mà chỉ là khung đó.
Oluwatobi Omotayo

4

Đối với ngôn ngữ Swift ...

Tôi gặp lỗi này "ld: file quá nhỏ (length = 0) ...."

Trong trường hợp của tôi, tôi chỉ cần làm sạch dự án và sau đó xây dựng lại ..

Các bước: -

1) Dự án goto -> Sạch sẽ

2) Dự án goto -> Xây dựng

Hi vọng điêu nay co ich..


Đã làm cho tôi. Đã xảy ra khi tôi chuyển đổi thiết bị từ iPhone 6 sang iPhone 4S.
racl101

Làm việc cho tôi quá. Cảm ơn rất nhiều
Lee

4

Điều này đã làm một mẹo cho tôi:

Đi đến

1) Sản phẩm> sạch

2) Windows> Dự án

3) Chọn dự án của bạn và nhấp vào " Xóa " Dữ liệu được dẫn xuất

4) Sản phẩm> Xây dựng


3

Một khả năng: Bật "Tước mã chết" trong cài đặt bản dựng Xcode 4.

Một khả năng khác: Có thể là bạn đã chuyển sang sử dụng LLVM cho một số khung công tác trước đây sử dụng GCC. Chuyển về GCC (hoặc LLVM GCC) có thể thoát khỏi những cảnh báo đó.


3

Tôi đã xác định nhầm một hằng số mới có cùng tên với một hằng số hiện có trong một tệp khác và nó gây ra lỗi này cho tôi khi sử dụng xCode 4.3.1. xCode không phàn nàn nhưng trình biên dịch không thích nó.


3

Tôi đã có thể khắc phục lỗi này bằng cách chỉnh sửa "Đường dẫn tìm kiếm thư viện"

Nó bị cắt ở vị trí đầu tiên vì tôi đã di chuyển một vài thư mục xung quanh và cuối cùng đã cho cài đặt bản dựng của tôi hai đường dẫn tìm kiếm khác nhau vì chúng được tự động thêm vào cài đặt bản dựng của bạn khi bạn liên kết thư viện / khung, nhưng chúng không luôn luôn loại bỏ.

Vì vậy, nếu bạn di chuyển một thư viện / khung được liên kết sang một thư mục khác và liên kết lại nó, bạn sẽ phải chỉnh sửa thủ công đường dẫn tìm kiếm.

Bạn có thể tránh điều này bằng cách xóa thư viện / khung trước khi di chuyển nó, nhưng tôi chưa kiểm tra điều đó.

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.