(các) biểu tượng không tìm thấy cho kiến ​​trúc i386


113

Khi cố gắng biên dịch với Xcode, tôi gặp lỗi sau:

  **Ld /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator/iKosher.app/iKosher normal i386
    cd /Users/doronkatz/Sites/xCode/iKosher
    setenv MACOSX_DEPLOYMENT_TARGET 10.6
    setenv PATH "/Xcode4/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Xcode4/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Xcode4/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Xcode4/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk -L/Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator -L/Users/doronkatz/Sites/xCode/iKosher -F/Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator -filelist /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Intermediates/iKosher.build/Debug-iphonesimulator/iKosher.build/Objects-normal/i386/iKosher.LinkFileList -mmacosx-version-min=10.6 -all_load -ObjC -Xlinker -objc_abi_version -Xlinker 2 -lz -framework Security -framework CFNetwork -framework CoreData -framework Foundation -framework UIKit -framework CoreGraphics -framework QuartzCore -o /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator/iKosher.app/iKosher

Undefined symbols for architecture i386:
  "_UTTypeCreatePreferredIdentifierForTag", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_UTTypeCopyPreferredTagWithClass", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_kUTTagClassMIMEType", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_kUTTagClassFilenameExtension", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_SCNetworkReachabilitySetCallback", referenced from:
      -[Reachability startNotifier] in Reachability.o
  "_SCNetworkReachabilityScheduleWithRunLoop", referenced from:
      -[Reachability startNotifier] in Reachability.o
  "_SCNetworkReachabilityUnscheduleFromRunLoop", referenced from:
      -[Reachability stopNotifier] in Reachability.o
  "_SCNetworkReachabilityCreateWithName", referenced from:
      +[Reachability reachabilityWithHostName:] in Reachability.o
  "_SCNetworkReachabilityCreateWithAddress", referenced from:
      +[Reachability reachabilityWithAddress:] in Reachability.o
  "_SCNetworkReachabilityGetFlags", referenced from:
      -[Reachability currentReachabilityStatus] in Reachability.o
      -[Reachability isReachable] in Reachability.o
      -[Reachability isConnectionRequired] in Reachability.o
      -[Reachability isConnectionOnDemand] in Reachability.o
      -[Reachability isInterventionRequired] in Reachability.o
      -[Reachability isReachableViaWWAN] in Reachability.o
      -[Reachability isReachableViaWiFi] in Reachability.o
      ...
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status**

Không chắc nó có nghĩa là gì.

Câu trả lời:



92

Nếu bạn nhận được loại thứ này đột ngột xuất hiện, điều đó thường có nghĩa là dự án đang thiếu một số khuôn khổ mà nó cần. Thư viện và các dự án phụ thuộc có thể yêu cầu khuôn khổ, vì vậy nếu gần đây bạn đã thêm một khuôn khổ thì điều đó có thể gây ra lỗi này.

Để thêm các khung, nhấp chuột phải vào tên dự án trong dạng xem dự án, chọn Add, sau đó chọn Existing frameworks...từ danh sách. Sau đó, tìm khung với các ký hiệu bạn đang thiếu.

Về cách bạn tìm thấy khung công tác nào bạn cần, tôi thấy sử dụng google là dễ dàng nhất, mặc dù bạn có thể cũng có thể sử dụng tìm kiếm trợ giúp Xcode. Tìm kiếm một trong các ký hiệu, cố gắng hết sức để tìm ra tên không bị nhầm lẫn (ví dụ SCNetworkReachabilityGetFlags:), và sau đó liên kết tài liệu đầu tiên bạn tìm thấy tại developer.apple.com thường là liên kết phù hợp. Bạn thường không phải đi săn xa. Trong trường hợp này, đó là trang này:

https://developer.apple.com/documentation/systemconfiguration/scnetworkreachability-g7d

Sau đó, ở đầu trang, nó cho bạn biết nên sử dụng khuôn khổ nào, SystemConfigurationtrong trường hợp này. Vì vậy, hãy thêm nó vào dự án và biên dịch lại.

Sau đó, chỉ cần tiếp tục làm điều này cho đến khi nó hoạt động ...

Chỉnh sửa: Tôi chưa bao giờ sử dụng trình mô phỏng, nhưng đây là những gì bạn làm trên thiết bị - Tôi cho rằng nó giống nhau ...


64

Đôi khi có các tệp nguồn bị thiếu trong mục tiêu của bạn.

  1. kiểm tra ký hiệu nào bị thiếu
  2. target-> build phase-> compile source
  3. thêm các tệp nguồn bị thiếu nếu chúng không được liệt kê
  4. lệnh + b cho phúc lạc

Bạn có thể chọn các tệp có vẻ như bị "thiếu" và kiểm tra trong thanh tiện ích bên phải xem các hộp kiểm của chúng được chọn cho Mục tiêu bạn đang xây dựng.


1
Điều này thường có thể xảy ra khi hợp nhất hai tệp dự án không sạch và tư cách thành viên đích bị mất.
Steven Hepting

1
Cảm ơn bạn rất nhiều, bằng cách nào đó xcode đã không thêm tệp .m bắt buộc vào giai đoạn xây dựng!
dreampowder

1
Cảm ơn :) Thêm 2 file cho dự án và chỉ sau khi làm những bước tất cả mọi thứ đã OK
user1105951

32

Tôi đã giải quyết nó bằng phương pháp sau (đối với XCode 4):

1) Chọn dự án trong cửa sổ điều hướng dự án sẽ hiển thị tóm tắt dự án ở bên phải

2) Chọn các giai đoạn xây dựng tab thứ 4

3) Chọn Liên kết nhị phân với tùy chọn thư viện

4) Thêm khuôn khổ mà bạn đang nhận được

5) Di chuyển khung từ thư mục chính vào thư mục khung

6) Xây dựng lại nó và lỗi không còn nữa.


Cảm ơn bạn. Tôi đã tìm thấy câu trả lời này khi tìm kiếm MFMailCompose và được giải quyết bằng cách thêm MessageUI.framework
Frank Yin

17

Vấn đề là tư cách thành viên mục tiêu cho tệp đã thêm bị thiếu đối với mục tiêu ứng dụng. Vì vậy, hãy chọn tệp và thêm dấu kiểm vào hộp thành viên mục tiêu

Ví dụ: nếu lỗi được hiển thị trong một định nghĩa phương thức chung. Mnhập mô tả hình ảnh ở đây


Tôi gặp lỗi Không tìm thấy biểu tượng này nhưng tình hình đơn giản hơn nhiều. Tôi đã thêm một mô-đun (tệp) mới với một chức năng mới mà tôi cần vào một trong các Lược đồ của mình. Khi tôi xây dựng một lược đồ khác một vài tuần sau đó, lệnh gọi đến hàm đó không được tìm thấy. Thêm nó vào mục tiêu là tất cả những gì cần thiết.
Sẽ

17

Tôi đã nghĩ đến giải pháp của mình cho việc này, sau khi trải qua vài giờ với cùng một lỗi :(

Những người ở trên đã chính xác rằng điều đầu tiên bạn nên kiểm tra là liệu bạn có bỏ lỡ thêm bất kỳ khung công tác nào hay không, hãy xem các bước được cung cấp bởi Pruthvid ở trên.

Vấn đề của tôi, hóa ra, là một lớp biên dịch bị thiếu sau khi tôi xóa nó, và sau đó đã thêm lại nó vào.

Kiểm tra "Nguồn biên dịch" của bạn như được hiển thị để biết các lớp lỗi được báo cáo. Thêm vào bất kỳ lớp nào bị thiếu mà bạn đã tạo.


2
CẢM ƠN ... Điều này phù hợp với tôi. Tôi đã cấy ghép một lớp tùy chỉnh. Đã sao chép cả lớp tùy chỉnh. h và .m vào dự án. Đã nhập # vào nó, lỗi vẫn xuất hiện. Thêm lớp tùy chỉnh '.m vào phần "Nguồn biên dịch" đã giải quyết được vấn đề đó!
GeneCode

Tuyệt vời! Tôi gặp vấn đề tương tự như Rocotilos, tôi đã nhập một loại tùy chỉnh, đã nhập khẩu, nhưng vẫn gặp sự cố. Điều này đã thực hiện thủ thuật! Cảm ơn rất nhiều!
Souleiman

8

Đảm bảo rằng khung còn thiếu thực sự được liệt kê trong "Mục tiêu / Giai đoạn xây dựng / Liên kết nhị phân với thư viện" nếu không chỉ thêm nó. Như đã đề cập trước đây, nó thường chỉ ra một khuôn khổ bị thiếu.

Trong dự án của tôi, có hai khuôn khổ giống hệt nhau được liệt kê, khi tôi xóa một trong số chúng, tôi đã gặp lỗi này, vì nó cũng loại bỏ nó trong danh sách "Liên kết nhị phân với thư viện". Tôi đã thêm lại và sự cố đã biến mất (và tôi vẫn có hai khuôn khổ được liệt kê)


6

Tôi đã khắc phục một lỗi tương tự trên dự án của mình bằng cách thay đổi Cài đặt bản dựng> Kiến trúc cho TẤT CẢ các mục tiêu của mình.

Sự cố: Khi tôi nâng cấp từ Xcode 4.4 lên Xcode 4.5, dự án của tôi vẫn biên dịch tốt trên trình mô phỏng nhưng không biên dịch trên thiết bị. Trên các thiết bị, nó gây ra lỗi "không tìm thấy (các) biểu tượng cho kiến ​​trúc armv7s," cùng với "Lỗi trình liên kết Apple Mach-O" và "clang: error: lệnh linker không thành công với mã thoát 1 (sử dụng -v để xem lệnh gọi ). "

Nguyên nhân (trong trường hợp của tôi): Dự án của tôi có nhiều mục tiêu và mặc dù Cài đặt xây dựng> Kiến trúc cho mục tiêu chính được đặt để bao gồm kiến ​​trúc armv7s, mục tiêu chính phụ thuộc vào mục tiêu khác (được liệt kê trong Giai đoạn xây dựng> Phụ thuộc) và Tôi đã không nghĩ đến việc đặt lại Cài đặt bản dựng> Kiến trúc cho mục tiêu khác và tôi phải thay đổi điều đó để bao gồm armv7s. Tôi cho rằng trình mô phỏng và thiết bị chạy trên các kiến ​​trúc khác nhau và đó là lý do tại sao trình mô phỏng vẫn ổn trong khi thiết bị thì không.


5

Dự án của bạn có phụ thuộc vào dự án khác không và mục tiêu trong dự án đó có được thiết lập để trở thành phụ thuộc trực tiếp của mục tiêu chính của bạn không? Nếu đúng như vậy và phần phụ thuộc không được thiết lập, thì mục tiêu phụ thuộc có thể không được tạo cho tất cả các cấu hình (tức là trình mô phỏng)

Chỉ là một phỏng đoán hoang đường.


4

Một tình huống khác có thể gây ra sự cố này là nếu mã của bạn gọi vào C ++ hoặc được gọi bằng mã C ++. Tôi đã gặp sự cố với chức năng tiện ích của tệp .c của riêng tôi hiển thị là "không tìm thấy biểu tượng" khi được gọi từ obj-C. Cách khắc phục là thay đổi loại tệp: trong Xcode 4, sử dụng ngăn thông tin mở rộng để đặt loại tệp thành "Objective-C ++ Source"; trong Xcode 3, sử dụng "Nhận thông tin" để thay đổi loại tệp thành "source.cpp.objcpp".


4

Trong trường hợp của tôi, không có giải pháp đã đăng nào hoạt động. Tôi đã phải xóa dự án và thực hiện kiểm tra mới từ máy chủ SVN . Thật may mắn cho tôi là dự án được lưu trữ trong một hệ thống kiểm soát phiên bản. Không biết tôi sẽ làm gì khác.


2

Trong một dự án C ++ sử dụng lớp được tạo khuôn mẫu đã xác định , trong khi nhận được lỗi tương tự, tôi đã chọn tệp .cpp với lớp được tạo khuôn mẫu đã xác định trong Bộ điều hướng dự án, sau đó Xóa> Loại bỏ Tham chiếu. Ngoài ra, tệp .h được liên kết, trong khi vẫn được tham chiếu trong dự án, cần có câu lệnh #include cho .cpp như sau:

#ifndef __CircularBuffer__CircularBufferT__
#define __CircularBuffer__CircularBufferT__

... snip ...

#include "CircularBufferT.cpp"
#endif /* defined(__CircularBuffer__CircularBufferT__) */

Nếu bạn muốn xem, một ví dụ dự án đơn giản có trên github :

Đây là một chút thủ thuật chuyển hướng và tôi không nhớ lại nguồn gốc của cách giải quyết này.


2

Nếu lỗi này xuất hiện đột ngột, có nghĩa là dự án đang thiếu một số khuôn khổ. Thư viện và các dự án phụ thuộc có thể yêu cầu khuôn khổ, vì vậy nếu gần đây bạn đã thêm một khung thì điều đó có thể gây ra lỗi này.

Để thêm khung, nhấp chuột phải vào tên dự án trong dạng xem dự án, chọn Thêm, sau đó chọn Khung hiện có từ danh sách. Sau đó, tìm khung với các ký hiệu bạn đang thiếu.

Điều khác là nếu bạn đã thêm bất kỳ lớp nào trong tài nguyên đã biên dịch và xóa các lớp đó khỏi dự án thì lỗi sẽ xuất hiện. Điều tốt nhất cần làm là xóa các lớp khỏi tài nguyên biên dịch (Cài đặt bản dựng -> nguồn biên dịch) đã bị xóa khỏi dự án.

Trong trường hợp của tôi, tôi đã thêm các lớp admob trong dự án và biên dịch dự án. Trong trường hợp sau này, tôi không muốn đưa admob vào dự án của mình nên tôi đã xóa các tham chiếu của các lớp admob khỏi dự án của mình. Khi lỗi này xảy ra, tôi đã xóa lớp .m của admob khỏi tài nguyên biên dịch đã giải quyết được vấn đề này.


2

Điều này đã xảy ra với tôi khi cố gắng sao chép qua PSPDFKIT thư viện demo vào dự án của tôi. Tôi đã làm theo tất cả các hướng dẫn trong trang web + tất cả các đề xuất trên trang này .. vì một số lý do mà nó tiếp tục đưa ra lỗi ở trên, vấn đề là nếu tôi gửi thông báo vào phương thức lỗi .. nó chỉ xuất hiện trong tệp nhị phân ( rõ ràng tôi không có quyền truy cập vào mã nguồn b / c tôi phải trả tiền cho nó).

Tôi nhận thấy điều này trong trang hướng dẫn mặc dù:

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

Vì vậy, tôi đã đi đến phần ruột của tệp cấu hình đó và tìm thấy điều này:

OTHER_LDFLAGS=$(inherited) -ObjC -fobjc-arc -lz -framework CoreText -framework CoreMedia -framework MediaPlayer -framework AVFoundation -framework ImageIO -framework MediaPlayer -framework MessageUI -framework CoreGraphics -framework Foundation -framework QuartzCore -framework AVFoundation -framework CFNetwork -framework MobileCoreServices -framework SystemConfiguration -weak_framework UIKit

Sau đó, tôi đi đến dự án mẫu được cung cấp bởi tác giả của thư viện nói trên .. và nhận thấy rằng các cờ trước đó đã sao chép nguyên văn sang các cờ liên kết khác trong cài đặt xây dựng của tôi .. tuy nhiên trong dự án của tôi .. chúng không như vậy! .. Vì vậy Tôi chỉ cần sao chép và dán chúng vào cài đặt xây dựng của dự án của tôi các cờ liên kết khác và mọi thứ đều hoạt động!

rút ngắn điểm: nếu bạn đang dựa vào một số tệp .xcconfig trên thiết lập của mình, hãy kiểm tra kỹ với nguồn mã mẫu hoặc thứ gì đó và đảm bảo rằng nó đã thực sự được áp dụng .. nó không được áp dụng đúng cách trong trường hợp của tôi


0

Một lý do khác khiến điều này có thể xảy ra là khi bạn NÂNG CẤP SDK.

Nếu bạn chỉ cần xóa nhóm, sau đó kéo và thả thư mục mới để chiếu, thì "Đường dẫn tìm kiếm thư viện" sẽ có cả SDK. Để giải quyết, chỉ cần xóa đường dẫn SDK cũ.


0

Tôi đã sử dụng CLGeocoder mà không thêm Core.Location Framework. Về cơ bản lỗi này có thể có nghĩa là nhiều thứ. Tôi mong điều này giúp được người nào khác.


0

Tôi đã bị bối rối bởi điều này trước đây chỉ khi nhận ra rằng tôi đã thêm một @interface chỉ dữ liệu và quên thêm khối @implementation trống.


0

Gặp phải vấn đề này trong Xcode 11, bản sửa lỗi đang thay đổi Mục tiêu triển khai tối thiểu từ 10.0 thành 11.0, hy vọng điều này sẽ giúp ai đó :)

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.