Biểu tượng không xác định cho kiến ​​trúc arm64


200

Tôi gặp phải lỗi Trình liên kết Apple Mach-O mỗi khi tôi nhập tệp từ CocoaPods.

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_FBSession", referenced from: someFile
ld: symbol(s) not found for architecture arm64

Tôi nhận được khoảng 12 trong số này, cho các Pod khác nhau mà tôi sử dụng.

Tôi đang cố gắng xây dựng cho iPhone 5S bằng XCode 5.

Tôi đã thử các giải pháp khác nhau ở đây trên SO, nhưng vẫn chưa có giải pháp nào hoạt động.

Làm cách nào để khắc phục lỗi Trình liên kết Apple Mach-O này?


Chỉ cần tìm thấy một cảnh báo khác có thể thú vị, tôi hy vọng điều này dẫn tôi đến giải pháp:

Ignoring file ~/Library/Developer/Xcode/DerivedData/SomeApp/Build/Products/Debug-iphoneos/libPods.a, 

file was built for archive which is not the architecture being linked (arm64):~/Library/Developer/Xcode/DerivedData/someApp/Build/Products/Debug-iphoneos/libPods.a


Giải pháp đơn giản Đi đến Mục tiêu -> Liên kết -> Cờ liên kết khác và thêm $ (được kế thừa) vào cờ liên kết khác trong cả Gỡ lỗi và Phát hành.
Mihir Oza

Câu trả lời:


248

Nếu Kiến trúcKiến trúc hợp lệ của bạn đều ổn, bạn có thể kiểm tra xem bạn đã thêm hay chưa $(inherited), sẽ thêm cờ liên kết được tạo trong nhóm, vào Cờ liên kết khác như sau: nhập mô tả hình ảnh ở đây


7
@chancyWu Bạn có thể giải thích?
Paul Brewczynski

5
ngoài ra nếu điều này vẫn không hoạt động, hãy thêm @ (kế thừa) vào Đường dẫn tìm kiếm thư viện.
Enrico Susatyo

1
Lol, bỏ qua Use the $(inherited) flagcảnh báo thiết bị đầu cuối. Và lỗi đã đưa tôi đến đây. đã cứu ngày của tôi.
Sushil Sharma

2
Tôi đang làm việc với Xcode 7.2 và trong Cờ liên kết khác -> Gỡ lỗi Tôi thấy: -weak_framework CoreFoundation -weak_framework UIKit -weak_framework AVFoundation -weak_framework CoreMedia -weak-lSystem -ObjC ... ở đây tôi đã thêm t làm việc
Alessandra

Bạn đã tiết kiệm rất nhiều thời gian của tôi. Cảm ơn.
Nirmalsinh

123

Vấn đề là cocoapod chưa được xây dựng cho kiến ​​trúc arm64 do đó chúng không thể được liên kết khi bạn xây dựng chúng. Có khả năng bạn không thể sử dụng các gói đó cho đến khi chúng được cập nhật và sử dụng kiến ​​trúc đó. Bạn có thể sửa lỗi trình liên kết bằng cách vào dự án -> đích (tên dự án của bạn) -> xây dựng cài đặt và thay đổi kiến ​​trúc thành kiến ​​trúc tiêu chuẩn (armv7, armv7s) và kiến ​​trúc hợp lệ cho armv7, armv7s.

Lưu ý rằng, điều này có nghĩa là bạn sẽ không nhận được toàn bộ sức mạnh của bộ xử lý 64 bit. Bạn nói rằng bạn đang xây dựng cho 5s, vì vậy có thể có một số lý do bạn cần điều này. Nếu bạn vì một lý do nào đó thực sự cần sức mạnh đó (có lẽ bạn đang xây dựng một trò chơi) và rất cần những tệp đó, bạn có thể gửi yêu cầu kéo và sau đó biên dịch lại dự án thành arm64 bằng cách đặt các trường tương tự thành arm64 trong các tệp bạn đã lấy từ các dự án nguồn mở. Nhưng, trừ khi bạn thực sự cần các tệp này tương thích 64 bit, điều đó có vẻ như hơi quá mức cho đến bây giờ.

EDIT: Một số người cũng báo cáo rằng việc thiết lập Build For Active Architectures thành CÓ cũng là cần thiết để giải quyết vấn đề này.

Kể từ 2014-04-28, cài đặt sẽ trông giống như thế này:

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


4
Điều này đã khắc phục lỗi, vì chạy trên trình giả lập, tuy nhiên, nó không giải quyết được lỗi khi chạy trên thiết bị. Pods đã bị từ chối vì libPods.a vì kiến ​​trúc của nó '' (vì một số lý do, nó không phát hiện ra - mặc dù tôi có thể thấy nó trong Xcode) không chứa tất cả các kiến ​​trúc cần thiết 'armv7 armv7s'
GangstaGraham

7
Ok, tôi đã nhận được điều này bằng cách đặt Build For Active Architectures thành Yes. Cảm ơn bạn rất nhiều!
GangstaGraham

2
Ngoài ra: bạn có thể sử dụng filelệnh trong Terminal để cho biết những gì kiến ​​trúc mà thư viện tĩnh hỗ trợ.
funroll

8
Chỉ cần vào đây để thêm vào điệp khúc: chọn CÓ cho BUILD CHO KIẾN TRÚC HOẠT ĐỘNG là lựa chọn tốt nhất ở đây.
Wells

56
Đây không còn là một giải pháp. Apple hiện cần hỗ trợ 64 bit cho tất cả các triển khai.

52

Tôi đã giải quyết vấn đề này bằng cách thiết lập rằng:

ARCHS = armv7 armv7s

VALID_ARCHS = armv6 armv7 armv7s arm64


1
Tôi đã gặp một vấn đề tương tự khi sử dụng XCode 5.1 lần đầu tiên, điều này đã khắc phục nó. Cảm ơn!
GangstaGraham

@morisunlight bạn có chắc không, bạn đã kiểm tra kiến ​​trúc nhị phân sau khi xây dựng chưa?
onmyway133

@ onmyway133 Tôi đã kiểm tra, nhưng bây giờ tôi chưa gặp vấn đề này trong XCode mới.
morisunlight

@morisunlight yeah, ý tôi là bạn mất arm64
onmyway133

Không còn lỗi xây dựng, cho đến thời điểm này nó vẫn ổn. Nhưng trong khi tải lên bản dựng được lưu trữ, tôi gặp lỗi thiếu arm64 bit vì hỗ trợ bit64 là bắt buộc từ ngày 1 tháng 2 năm 2015.
zeeawan

45

Tôi đã gặp phải vấn đề tương tự / tương tự khi thực hiện AVPictureInPictureControllervà vấn đề là tôi đã không liên kết khung AVKit trong dự án của mình.

Thông báo lỗi là:

Undefined symbols for architecture armv7:
   "_OBJC_CLASS_$_AVPictureInPictureController", referenced from:
       objc-class-ref in yourTarget.a(yourObject.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Giải pháp:

  1. Đi đến dự án của bạn
  2. Chọn mục tiêu của bạn
  3. Sau đó, đi đến Giai đoạn xây dựng
  4. Liên kết mở nhị phân với thư viện
  5. Cuối cùng, chỉ cần thêm + các AVKit khuôn khổ / bất kỳ khác khuôn khổ .

Hy vọng rằng điều này sẽ giúp người khác gặp vấn đề tương tự tôi gặp phải.


6
Vâng, đáng nói là đây là một lỗi bị ném nếu bạn thiếu một khung công tác. Một manh mối là bạn thử xóa kiến ​​trúc và cái tiếp theo / còn lại cũng thất bại ...
Kristen Waite

1
làm tốt lắm. `" _OBJC_CLASS _ $ _ XXXXXClass ", được tham chiếu từ:` ,, thêm xxx Framework.
iHTCboy

Tại chỗ trên! Bất cứ ai nhìn thấy bất cứ điều gì có in 'xml' đều kiểm tra điều này - trong trường hợp của tôi, đó là khung 'libxml' không được liên kết.
Evusas

Sau khi sửa đổi giới thiệu pod, lỗi này xảy ra và tất cả các phương thức không được sửa. Nhưng phương pháp của bạn khắc phục vấn đề. Lưu ý: lib không thể được tìm kiếm.
sao lee

33

Tôi cũng gặp phải vấn đề tương tự, các phương pháp trên sẽ không hoạt động. Tôi vô tình xóa các tập tin trong thư mục sau đây.

Vị trí thư mục:

~ / Thư viện / Nhà phát triển / Xcode / DeruredData /

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


3
Lạ như điều này có vẻ như điều này thực sự làm việc. Cảm ơn, bạn đời.
Felipe

2
Xóa thủ công dữ liệu có nguồn gốc, cũng là mẹo cho tôi. Chúc mừng!
L_Sonic

7
Cảm ơn bạn! Tôi muốn thêm một gợi ý: thư mục nằm dưới / Người dùng / tên của bạn / Thư viện / Nhà phát triển / XCode / DeruredData
Stefano Buora

Bạn cũng có thể xóa dữ liệu dẫn xuất bằng thiết bị đầu cuối: rm -rf ~ / Library / Developer / Xcode / DeruredData
simon_smiley

Tiết kiệm thời gian của tôi ... XDDĐ
Hsiao-Ting

25

Đặt Kiến trúc thành armv7 armv7s , Chỉ xây dựng Kiến trúc hoạt động thành KHÔNG , cho mọi mục tiêu trong dự án, bao gồm mọi mục tiêu trong Pods


Đã làm việc sắp xếp ... Bây giờ tôi nhận được lỗi "Chữ ký bitcode không hợp lệ".
JeremyF

18

Tôi đã sửa lỗi của tôi bằng cách kiểm tra các tệp thực hiện được chọn trong tư cách thành viên đích ở bên phải. Điều này rất hữu ích, đặc biệt là trong việc xử lý các phần mở rộng, tức là bàn phím tùy chỉnh.

Thành viên mục tiêu


Xcode 9 không áp dụng điều này tự động, ngay cả khi đã chọn hộp kiểm. Cảm ơn bạn.
Amro Shafie

Đó là vấn đề. Thankyou
Ignacio Hernández

11

Dưới đây là một số giải thích tại sao build_active_architecture được đặt thành NO. Xcode hiện phát hiện thiết bị nào bạn đã kết nối và sẽ thiết lập kiến ​​trúc hoạt động tương ứng. Vì vậy, nếu bạn cắm iPod Touch thế hệ 2 vào máy tính, Xcode nên đặt kiến ​​trúc hoạt động thành armv6. Xây dựng mục tiêu của bạn với cấu hình Debug ở trên bây giờ sẽ chỉ xây dựng nhị phân armv6 để tiết kiệm thời gian (trừ khi bạn có một dự án lớn, bạn có thể không nhận thấy sự khác biệt nhưng tôi đoán số giây cộng lại theo thời gian).

Khi bạn tạo cấu hình Phân phối để xuất bản lên App Store, bạn nên đảm bảo tùy chọn này chưa được đặt, để Xcode thay vào đó sẽ xây dựng nhị phân phổ quát chất béo http://useyourloaf.com/blog/2010/04/21/xcode -build-active-architecture-only.html


Đó là FUBARed không thể tin được! Đầu ra của XCode phụ thuộc vào thiết bị bạn đã kết nối với máy dựng!
Matt

6

Bạn chỉ cần xóa arm64 khỏi Kiến trúc hợp lệ và đặt NO thành Chỉ kiến ​​trúc hoạt động . Bây giờ chỉ cần làm sạch, xây dựng và chạy. Bạn sẽ không thấy lỗi này nữa.

:) KP


5

Đã giải quyết sau khi xóa nội dung của DeruredData -> Build -> Products -> Debug-iphoneos


4

Điều này có thể liên quan đến libz.dylibhoặc libz.tbd, chỉ cần thêm nó vào các mục tiêu của bạn cho các nhị phân liên kết và cố gắng biên dịch lại.


Đã cố gắng thêm khung Tesseract và chỉ điều này giúp tôi, cảm ơn. !
HelloimDarius

3

Tôi đã giải quyết nó bằng cách đặt các vòm hợp lệ thành armv7 armv7 và thiết lập các kiến ​​trúc hoạt động xây dựng chỉ thành CÓ khi phát hành và sau đó thực hiện "cài đặt pod" mới từ dòng lệnh


3

Được tặng iPhone 5s và chưa nhận được phiên bản 64 bit của thư viện bên thứ ba, tôi phải quay lại chế độ 32 bit với Xcode mới nhất (trước 5.1 không khiếu nại).

Tôi đã sửa lỗi này bằng cách xóa arm64 khỏi danh sách Kiến trúc hợp lệ và sau đó đặt Build Active Architecture Only thành NO. Dường như với tôi điều này có ý nghĩa hơn so với cách khác như được hiển thị ở trên. Tôi đang đăng trong trường hợp người khác không thể có bất kỳ giải pháp nào ở trên để làm việc cho họ.


3

Tôi gặp vấn đề tương tự sau khi nâng cấp lên Xcode 5.1 và khắc phục bằng cách đặt Architectures thành armv7 armv7s


3

Đã bị mắc kẹt về vấn đề này cả ngày.

Tôi đã có nhiều Lược đồ, nó đã được biên dịch tốt cho Demo, Internal, Release - tuy nhiên lược đồ Debug sẽ không biên dịch và đã phàn nàn về libPods.a bị thiếu.

Giải pháp là đi đến Dự án -> Mục tiêu -> Xây dựng cài đặt và thay đổi "Chỉ xây dựng kiến ​​trúc hoạt động" thành CÓ. Làm sạch và xây dựng! Cuối cùng giờ ngứa đầu đã giải quyết!


Không phải vấn đề chính xác như bạn nhưng tương tự. Tôi đã giải quyết nó với cùng một phương pháp bạn cung cấp.
Helzgate

2

Thiết -ObjCđể Other Linker Flagstrong Cài đặt xây dựng kế hoạch giải quyết vấn đề.


2

Điều này làm việc cho tôi:

ios sdk 9.3

vào cài đặt xây dựng của bạn về app.xcodeproj kiến trúc hợp lệ: armv7 armv7s Build Active architecture: No

Làm sạch và xây dựng, làm việc cho tôi.


1

Cách sau đây giúp tôi biên dịch GPUImage mà không gặp lỗi trên Xcode 5.1 cho cả trình giả lập 64 bit và võng mạc iPad Mini, mà không cần xóa arm64 khỏi danh sách Kiến trúc hợp lệ (đánh bại mục đích sở hữu thiết bị 64 bit để thử nghiệm Hiệu suất 64 bit).

Tải xuống thư mục .zip từ trang GitHub: https://github.com/BradLarson/GPUImage

Giải nén và điều hướng đến thư mục 'khung'. Từ đây, thêm và sao chép thư mục 'Nguồn' vào dự án Xcode của bạn. Đảm bảo 'Sao chép các mục vào thư mục của nhóm đích' được chọn và 'Tạo nhóm cho mọi thư mục đã thêm' cũng được chọn. Điều này sẽ sao chép các tệp tiêu đề / triển khai chung, iOS và Mac vào dự án của bạn.

Nếu bạn không cần các tệp Mac vì bạn đang biên dịch cho iOS, bạn có thể xóa thư mục Mac trước khi sao chép các tệp vào dự án của mình hoặc chỉ cần xóa nhóm từ trong Xcode.

Khi bạn đã thêm thư mục Nguồn vào dự án của mình, chỉ cần sử dụng các cách sau để bắt đầu sử dụng các lớp / phương thức của GPUImage:

#import "Source/GPUImage.h" 

Một vài điều cần chỉ ra:

  • Nếu bạn gặp lỗi khi không tìm thấy 'Ca cao', bạn đã thêm thư mục / tiêu đề Mac vào dự án iOS của mình - chỉ cần xóa nhóm / tệp Mac khỏi dự án của bạn và cảnh báo sẽ biến mất
  • Nếu bạn đổi tên thư mục Nguồn (không phải nhóm trong Xcode), hãy sử dụng tên đó thay vì "Nguồn / GPUImage.h" trong hướng dẫn #import. Vì vậy, nếu bạn đổi tên thư mục thành GPUImageFiles trước khi bạn thêm vào dự án của mình, hãy sử dụng: #import "GPUImageFiles / GPUImage.h
  • Rõ ràng đảm bảo arm64 được chọn trong danh sách Kiến trúc hợp lệ để tận dụng bộ xử lý A7 64 bit!
  • Đây không phải là gói GPUImage.framework (chẳng hạn như nếu bạn đã tải xuống khung từ http://www.raywenderlich.com/60968/ios-7-blur-effects-gpuimage ) vì vậy nó có thể không phải là cách chính xác để sử dụng GPUImage Brad Larson dự định, nhưng nó hoạt động cho dự án SpriteKit hiện tại của tôi.
  • Không cần liên kết với khung / thư viện, v.v. - chỉ cần nhập thư mục nguồn và tiêu đề thực hiện như mô tả ở trên

Hy vọng những điều trên có ích - dường như không có hướng dẫn rõ ràng ở bất cứ đâu mặc dù câu hỏi được hỏi nhiều lần, nhưng đừng sợ, GPUImage chắc chắn hoạt động cho kiến ​​trúc arm64!


1

Vấn đề này xảy ra với tôi sau khi cài đặt một pod qua Podfile và pod install. Sau khi thử một loạt các bản sửa lỗi khác nhau, cuối cùng tôi cũng chỉ cần nhập Pod thủ công (kéo các tệp cần thiết vào dự án của mình) và điều đó đã giải quyết được vấn đề.


điều đó cũng làm việc cho tôi nhưng là một nhóm dễ dàng với một tệp.
iluvatar_GR

1

Khi câu trả lời morisunlight chỉ đúng hướng, một chút tinh chỉnh trong câu trả lời của anh ấy đã giải quyết vấn đề của tôi cho iOS8.2. Cảm ơn anh ấy.

Tôi đã giải quyết vấn đề này bằng cách thiết lập rằng:

ARCHS = armv7

VALID_ARCHS = armv6 armv7 armv7s arm64

BUILD ACTIVE ARCHITECTURE ONLY= NO

1
  1. Chuyển đến mục tiêu Cài đặt bản dựng.
  2. đặt CHỈ KIẾN TRÚC HOẠT ĐỘNG BUILD = NO cho cả Gỡ lỗi và Phát hành
  3. Xây dựng và chạy

3
đặt CHỈ KIẾN TRÚC HOẠT ĐỘNG BUILD thành KHÔNG trong dự án PODS!
Elad

1

Trong trường hợp của tôi, tôi đã phải tìm kiếm

C++ Standard Libraryvà chắc chắn rằng đó libc++là cái được chọn.


1

Đối với tôi, tôi sử dụng opencv 2.4.9 trong xcode 7.2 cho iOS và đã xảy ra lỗi ở trên và tôi giải quyết các lỗi bằng cách sử dụng opencv thông qua cài đặt pod thay vì khung opencv ngoại tuyến.

Bạn có thể thử bằng cách thêm văn bản nhóm opencv bên dưới và xóa khung opencv ngoại tuyến nếu bạn đã sử dụng.

nhóm 'OpenCV', '2.4.9'


1

Không có giải pháp nào khắc phục lỗi này trong trường hợp của tôi (Xcode 9), với TesseractOCRiOS. Sau nhiều giờ thử nghiệm và sai sót, tôi đã đưa ra một giải pháp tốt. Tôi chỉ cần xóa 'pod 'TesseractOCRiOS', '~> 4.0.0'trong Podfile, chạy pod install. Và sau đó, thêm pod 'TesseractOCRiOS', '~> 4.0.0'lại Podfilevà chạy pod installlại.

Bang! Nó hoạt động!


1

"Mục tiêu [Gỡ lỗi] OPN ghi đè cài đặt bản dựng KHÁC_LDFLAGS". Đây là vấn đề chính. Sau khi thêm $ (được kế thừa) trong dòng mới trong các cờ liên kết khác đã giải quyết vấn đề của tôi. nhập mô tả hình ảnh ở đây


1

trong một số trường hợp, nếu bạn xác định thêm một giao diện trong tệp .h, nhưng không thực hiện tất cả các giao diện này thì đã xảy ra lỗi này.

Trình liên kết không thể tìm thấy việc triển khai trong tệp .m, vì vậy bạn cần triển khai nó trong tệp .m của mình cho mọi giao diện.

Để khắc phục lỗi này:

1.in tập tin .m, cung cấp việc thực hiện cho từng giao diện. 2.rebuild



0

Tôi đã gặp phải vấn đề tương tự sau khi cài đặt khung AWS để khắc phục vấn đề này, tôi đã cập nhật tệp cấu hình POD từ dự án của bạn được tạo sau khi cài đặt AWS POD. Kiểm tra tập tin cấu hình như dưới đây

OTHER_LDFLAGS = $(inherited) -ObjC -l"Pods-AWSAutoScaling" -l"
Pods-   AWSCloudWatch" -l"Pods-AWSCognito" -l"Pods-AWSCore" -l
"Pods-AWSDynamoDB" -l"Pods-AWSEC2" -l"Pods-AWSElasticLoadBalancing" 
-l"Pods-AWSKinesis" -l"Pods-AWSLambda" -l"Pods-AWSMachineLearning" 
-l"Pods-AWSS3" -l"Pods-AWSSES" -l"Pods-AWSSNS" -l"
Pods-AWSSQS"-l "Pods-AWSSimpleDB" -l"Pods-Bolts" -l"Pods-FMDB" 
-l"Pods-GZIP" -l"Pods-Mantle" -l"Pods-Reachability" -l"Pods-TMCache" 
-l"Pods-UICKeyChainStore" -l"Pods-XMLDictionary" -l"sqlite3" -l
"z"-framework "Accelerate" -framework "AssetsLibrary" 
-framework "CoreLocation" -framework "Foundation" -framework
"ImageIO" -framework "Security" -framework "SystemConfiguration"
-framework "UIKit" -weak_framework "UIKit"
 OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS)   

nếu tệp cấu hình của bạn không hoạt động chính xác thì Đặt cờ Trình liên kết khác của bạn thành $ (được kế thừa)


0

Nếu cài đặt kiến ​​trúc và trình liên kết trông ổn, hãy kiểm tra tệp h của bạn. Vấn đề của tôi là cùng một lỗi, nhưng tôi đã cấu trúc lại các tệp h và tôi đã xóa một câu lệnh bên ngoài. Các tập tin m khác đang sử dụng biến đó, gây ra lỗi liên kết.


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.