Tệp là phổ quát (ba lát), nhưng nó không chứa lỗi (n) ARMv7-s cho các thư viện tĩnh trên iOS, dù sao đi nữa?


403

Tôi đã nâng cấp phiên bản Xcode và khi sử dụng các thư viện tĩnh bên ngoài, tôi nhận được thông báo này:

ld: file là phổ quát (3 lát) nhưng không chứa lát (n) armv7s: / file / location cho architecture armv7s 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)

Có cách nào để bỏ qua điều này và thêm hỗ trợ cho thư viện nếu nhà phát triển thư viện chưa cập nhật thư viện của họ chưa?


Đây dường như là một giải pháp tốt cho bây giờ - galloway.me.uk/2012/09/hacking-up-an-armv7s-l
Library

Câu trả lời:


418

Nếu bạn muốn xóa hỗ trợ cho bất kỳ kiến ​​trúc nào, ví dụ, ARMv7 trong trường hợp của bạn, hãy sử dụng menu Project -> Build Settings -> xóa kiến ​​trúc khỏi "kiến trúc hợp lệ".

Bạn có thể sử dụng điều này như một giải pháp tạm thời cho đến khi thư viện đã được cập nhật. Bạn phải xóa kiến ​​trúc khỏi dự án chính của bạn, không phải từ thư viện.

Ngoài ra, bạn có thể đặt cờ cho cấu hình gỡ lỗi của mình "Chỉ xây dựng kiến ​​trúc hoạt động" thành Có. Để cấu hình phát hành "Chỉ xây dựng kiến ​​trúc hoạt động" thành Không, chỉ để bạn nhận được lời nhắc trước khi phát hành rằng bạn nên nâng cấp bất kỳ thư viện bên thứ ba nào bạn đang sử dụng.


11
bạn không phải biên dịch lại thư viện. bạn có thể xóa cờ này khỏi dự án đang sử dụng thư viện.
Nicholas

4
Nó sẽ hoạt động, vì các ứng dụng cũ chưa được biên dịch với sự hỗ trợ của armv7 cũng phải chạy. Nhưng bạn sẽ mất một số tối ưu hóa cụ thể. Đây sẽ là một cách giải quyết tạm thời.
Nicholas

2
Khuôn khổ Dropbox đã được cập nhật cho vấn đề này thấy forums.dropbox.com/topic.php?id=90014
railwayparade

6
Việc xóa armv7 khỏi danh sách Kiến trúc hợp lệ có hiệu quả đối với tôi, tuy nhiên, cũng đã xóa nó khỏi Kiến trúc. Tuy nhiên, trong cả hai trường hợp, tôi sẽ nhận được No architectures to compile for (ARCHS=i386, VALID_ARCHS=armv7).từ trình liên kết mà tôi chỉ có thể giải quyết bằng cách thêm i386vào danh sách Kiến trúc hợp lệ.
levigroker

6
Không, armv7s là tập lệnh của bộ xử lý A6 đang được sử dụng trong iPhone 5. Vì A6 tương thích ngược, nên nó vẫn sẽ chạy tập lệnh armv7.
Nicholas

191

Tôi chỉ đơn giản là đã chuyển "Chỉ xây dựng kiến ​​trúc hoạt động" thành "Có" trong cài đặt xây dựng của mục tiêu và giờ thì ổn rồi!


1
@ Blasco73 Bạn có biết rằng bạn thật tuyệt vời không? Bạn nên. Ở đây đi, thưa ngài, thật tuyệt vời!
thandasoru

15
Làm thế nào đây có thể là một giải pháp tốt. Nó xóa lỗi, nhưng bạn chỉ nhận bản dựng cho vòm hiện tại, không phải tất cả trên thị trường ...
esbenr

27

Cố gắng xóa armv7 khỏi "Kiến trúc hợp lệ" của dự án để giải phóng khỏi sự cố này cho điện thoại iOS 5.1


13

Tôi vừa đăng một bản sửa lỗi ở đây cũng sẽ áp dụng trong trường hợp này - về cơ bản, bạn thực hiện tìm kiếm và thay thế hex trong thư viện bên ngoài của bạn để làm cho nó nghĩ rằng đó là mã ARMv7. Bạn có thể sử dụng lipođể chia nó thành 3 thư viện tĩnh, sao chép / sửa đổi ARMv7, sau đó sử dụng lipolại để lắp ráp một thư viện mới cho cả 4 kiến ​​trúc.


5

Hỗ trợ Flurry cho iPhone 5 (ARMv7) Như tôi đã đề cập trong bài đăng ngày hôm qua, Flurry bắt đầu làm việc trên một phiên bản SDK iOS để hỗ trợ bộ xử lý ARMv7 trong iPhone 5 mới ngay sau thông báo vào thứ Tư.

Tôi rất vui khi nói với bạn rằng công việc đã hoàn thành và SDK hiện đã có sẵn trên trang web.


4

sử dụng menu Project -> Build Settings ->

sau đó loại bỏ armv7 khỏi "kiến trúc hợp lệ". Nếu tiêu chuẩn đã được chọn thì xóa nó và sau đó thêm armv7.


1

Trong trường hợp điều này xảy ra với một ai đó. Tôi đã xây dựng thư viện của riêng mình để sử dụng với mã của bên thứ ba. Trong khi tôi đang xây dựng nó để phân phối, tôi đã vô tình để iPhone 4S của mình cắm vào và vì vậy Xcode chỉ xây dựng thư viện của tôi cho kiến ​​trúc được cắm thay vì tuân theo các cài đặt dự án. Hủy bỏ bất kỳ cắm vào thiết bị và xây dựng lại thư viện, liên kết nó, và bạn sẽ ổn thôi.

Hy vọng nó giúp.


0

Trong trường hợp của tôi, tôi đã liên kết với thư viện của bên thứ ba hơi cũ (được phát triển cho iOS 6, trên XCode 5 / iOS 7). Do đó, tôi đã phải cập nhật thư viện của bên thứ ba, thực hiện Dọn dẹp và Xây dựng và hiện đã xây dựng thành cô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.