2010-05-10 36 views
5

Tôi đã mất rất nhiều thời gian để giải quyết vấn đề này, sử dụng các tìm kiếm của Google và các câu hỏi Stack Overflow khác không có sẵn.Lỗi liên kết XCode khi nhắm mục tiêu armv7

Tôi có ứng dụng phổ dụng iPhone/iPad, có vẻ như biên dịch tốt khi mục tiêu là armv6. Tuy nhiên, khi thiết bị là iPad, tôi nhận được cảnh báo này:

 
warning: building for SDK 'Device - iPhone OS 3.2' requires an armv7 architecture. 

Rất tiếc, ứng dụng vẫn chạy tốt trên iPad bất chấp cảnh báo này. Tuy nhiên, tôi muốn làm những điều "đúng cách" những gì bao giờ có nghĩa là trong trường hợp này. Khi tôi chuyển cấu trúc đích sang armv7, tôi nhận được các lỗi liên kết:

 
    "___restore_vfp_d8_d15_regs", referenced from: 
    *redacted* 

    "___save_vfp_d8_d15_regs", referenced from: 
    *redacted* 

ld: symbol(s) not found 

collect2: ld returned 1 exit status 

Các phần "lỗi" được tham chiếu đến thư viện tĩnh mà tôi đang cố gắng liên kết.

Đây là những gì tôi đã thử từ nhiều đề xuất trực tuyến. Mỗi trong số này được đề nghị nhiều hơn một lần mà không cần bất kỳ lời giải thích, dẫn tôi để tin rằng không ai hoàn toàn hiểu được vấn đề này:.

"Không bao giờ sử dụng trình đơn thả xuống ở phía trên bên trái của cửa sổ XCode để lựa chọn mục tiêu Thay vào đó , đặt SDK này thành Base SDK và sau đó là SDK cơ sở cho iPhone OS 3.0 trong cấu hình đích. Đặt thiết bị mục tiêu thành mục tiêu ưa thích của bạn (iPad, iPhone OS 3.2 trong tình huống của tôi.) "

Điều này mang lại lỗi "Không tìm thấy thư viện cho -lcrt1.3.1.o"

"Đảm bảo rằng GCC không liên kết với phiên bản sai của thư viện chuẩn. (Bạn sẽ phải chắc chắn rằng các LIBRARY_SEARCH_PATH không có con đường sai lầm trong nó.) "

LIBRARY_SEARCH_PATH của tôi đã trống rỗng, vì vậy điều này dường như không có liên quan.

" Thử biên soạn với GCC 4.0 chứ không phải là GCC 4.2 "

tôi nhận được một lỗi cú pháp bên trong một tập tin tiêu đề UIKit lỗi này là. 'cú pháp lỗi trước khi 'AT_NAME' dấu hiệu' Điểm mấu là" UIKIT_EXTERN @ interface UILocalizedIndexedCollation:.. NSObject . "

Một dự án khác chỉ biên soạn với các cài đặt mục tiêu tương tự , thực sự khiến tôi đặt câu hỏi về sự tỉnh táo của mình. Tôi có thể đối phó với một dự án XCode bị hỏng?

Nếu có ai biết điều gì đang thực sự xảy ra và có tham khảo hoặc không bận tâm giải thích, tôi sẽ rất biết ơn.

Chúc mừng!

+1

gì kiến ​​trúc được kết hợp trong thư viện? Bạn có thể tìm thấy điều này với lệnh tệp, ví dụ: "tập tin libfoo.a". – Crufty

Trả lời

4

VFP giữa ARMv7 và ARMv6 khác nhau theo nhiều cách khác nhau. Trong ARMv7 nó thường thích hợp hơn để sử dụng NEON. Vấn đề là thư viện tĩnh của bạn phụ thuộc vào VFP trong ARMv6 - bạn cần phải biên dịch thư viện tại ARMv7 hoặc giữ toàn bộ ứng dụng tại ARMv6.

Hoàn nguyên về GCC 4.0 là ngớ ngẩn - Hỗ trợ ARMv7 về cơ bản không tồn tại trở lại sau đó trừ khi Apple đã backported nó.

+0

Cảm ơn thông tin và tôi đồng ý về điều GCC 4.0. Sự khác biệt về VFP sẽ giải thích những gì đang xảy ra. Điều lạ lùng là, các ứng dụng mẫu đi kèm với thư viện được biên dịch tốt (và thậm chí có các thiết lập tương tự.) Nó có thể là một loại phụ thuộc snafu trong dự án xcode, tạo ra các lỗi liên kết. – Tom

+0

Wow - cảm ơn bạn rất nhiều. Tôi lãng phí thời gian vào việc này và bạn đã cứu tôi nhiều giờ hơn. – Mups

1

tôi đã có lỗi như nhau ngoại trừ nó đã được cho ARMv6. Tôi đã sửa chúng bằng cách bỏ chọn "Biên dịch cho ngón tay cái" trong cài đặt dự án cho thư viện tĩnh và dự án chính.

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