2012-09-13 27 views
7

Với các thiết bị iPhone 5 và các thiết bị armv7 khác hiện đang xuất hiện, có các vấn đề tương thích với khung công tác bên thứ ba hiện có (nguồn đóng) như Flurry. . Một tùy chọn là chờ cho đến khi họ phát hành một bản dựng mới, nhưng tôi đã hy vọng có thể có một lá cờ trình biên dịch hoặc thứ tôi có thể sử dụng trong dự án Xcode của mình. và sử dụng armv7 để thay thế. Có bất cứ điều gì như thế này tồn tại?Có một lá cờ trình biên dịch cho biết thiếu kiến ​​trúc armv7s

+10

** Ngăn xếp ngăn xếp không đóng hoặc xóa câu hỏi do NDA giữa các bên thứ ba **. Người kiểm duyệt không ở đây để thực thi các thỏa thuận giữa hai bên thứ ba riêng biệt. Bất kể nó có phải là NDA hay không, nếu đó là một câu hỏi thực tế, có thể trả lời và đáp ứng nguyên tắc chất lượng Stack Overflow thì câu hỏi vẫn mở và chưa được xóa. – casperOne

+1

Xin chào Matt. Chỉ muốn cung cấp cho bạn một bản cập nhật nhanh chóng mà Flurry phát hành 4.0.3 với sự hỗ trợ cho armv7s vào thứ Sáu, ngày 14 tháng 9. Đã có bản phát hành tiếp theo 4.0.4 ngày hôm qua, ngày 17 tháng 9, để loại bỏ một số cảnh báo trình biên dịch. –

+0

Cảm ơn, tôi đã nhận được vài phút sau khi nó được phát hành. – coneybeare

Trả lời

10

Không thể tải một khung không bao gồm kiến ​​trúc được nhắm mục tiêu.

Những gì bạn có thể làm chỉ gửi một ứng dụng armv7 cho đến khi các khung công tác được cập nhật. Ứng dụng sẽ vẫn hoạt động trên iPhone 5, chỉ cần không sử dụng tối ưu hóa hiệu suất mới nhất mà ứng dụng cung cấp.

Hoặc nếu bạn có thể sống mà không có khuôn khổ trên kiến ​​trúc mới, bạn có thể yếu liên kết nó. Nhưng sau đó bạn cần phải kiểm tra mã của bạn nếu nó được tải ở khắp mọi nơi bạn sử dụng các công cụ từ khuôn khổ.

6

Đã từng là cờ liên kết trong GCC, allow_sub_type_mismatches, cho phép bạn kết hợp và khớp các phiên bản kiến ​​trúc ARM trong thư viện được liên kết, nhưng dường như chúng đã biến mất trong các phiên bản Xcode gần đây.

Tuy nhiên, điều này thực sự có thể bị tấn công xung quanh theo một cách khác; tạo một bản sao của khuôn khổ, xem nội dung của nó, mở ra các tập tin thư viện mã thực tế bên trong của nó trong một trình soạn thảo hex, và làm như sau thay thế tất cả:

CEFAEDFE 0C000000 09000000 

để

CEFAEDFE 0C000000 0B000000 

gì bạn Về cơ bản, việc thay đổi tiêu đề bên trong của mỗi đối tượng mã để xác định nó là ARMv7 chứ không phải mã ARMv7 - các bộ lệnh tương thích ngược (hoặc có vẻ như vậy), vì vậy nó sẽ chạy tốt ngay cả với hack này, mặc dù Tôi phải thừa nhận rằng chúng tôi sẽ không biết điều đó cho đến khi chúng tôi thực sự có cơ hội thử nghiệm nó trên iPhone 5.

Dù sao, khi bạn đã sửa đổi khung công tác, chỉ cần thêm cả hai phiên bản vào dự án của bạn và liên kết đến phiên bản phù hợp từ mỗi kiến ​​trúc. Bạn cũng có thể tạo một khung công tác mới bằng cách sử dụng lipo để hợp nhất các thư viện đã sửa đổi và ban đầu.

+2

Đây chính xác là những gì tôi đã làm và hiển thị như thế nào ở đây - http://www.galloway.me.uk/2012/09/hacking-up-an-armv7s-library/. – mattjgalloway

+0

Cool - chắc chắn sắp xếp quá trình để có một kịch bản tự động cho nó, cộng với nó loại bỏ khả năng vô tình thay đổi CEFAEDFE 0C000000 09000000 mà không liên quan đến tiêu đề Mach-O. – Ertebolle

+1

Ý của bạn là "bị lấy đi trong LLVM"? Đó là một lá cờ liên kết, vì lợi ích của Vị Tiên Tri vĩ đại Zarquon! Không có gì để làm với trình biên dịch, và nó thực sự làm việc, mặc dù nó có lẽ là cách tồi tệ nhất có thể để giải quyết vấn đề này (gợi ý: cách thích hợp là chọn không tham gia ARMv7 bằng cách loại bỏ nó khỏi cài đặt xây dựng Kiến trúc). –

Các vấn đề liên quan