2011-01-24 44 views
16

Một số thư viện yêu cầu cờ liên kết -all_load khi liên kết đến dự án Xcode. Tuy nhiên, điều này dẫn đến lỗi liên kết nếu có xung đột biểu tượng giữa các thư viện. Giải pháp là sử dụng-force_load, cho phép bạn sử dụng -all_load một cách hiệu quả trên một số thư viện, chứ không phải trên các thư viện khác.Xcode - nhận force_load hoạt động với đường dẫn tương đối

Tuy nhiên, điều này sẽ dẫn đến một vấn đề mới, ít nhất là đối với tôi. Bất cứ khi nào tôi sử dụng-force_load với đường dẫn tương đối vào thư viện, trình liên kết luôn tìm thấy xung đột biểu tượng giữa thư viện và chính nó. Dường như người liên kết nghĩ rằng thư viện với đường dẫn tuyệt đối của nó và thư viện với đường dẫn tương đối của nó là các thư viện khác nhau, và do đó tìm thấy xung đột giữa thư viện và chính nó.

Tôi có thể tránh điều này bằng cách sử dụng đường dẫn tuyệt đối với cờ. Nhưng đây không phải là một giải pháp tuyệt vời, vì nó là thuận tiện để giữ mã nguồn cho các thư viện trong thư mục tài liệu của tôi. Nhưng đường dẫn đến thư mục tài liệu sẽ khác trên các máy khác.

Câu hỏi: Có ai có thể lấy force_load hoạt động với đường dẫn tương đối tới thư viện không?

EDIT: cung cấp thông tin nền, xem this question

Trả lời

36

Với Xcode 4, nếu bạn bao gồm các dự án thư viện vào dự án ứng dụng của bạn, sau đó bạn có thể thêm video này vào các Flags Linker khác:

-force_load $(BUILT_PRODUCTS_DIR)/<library_name.a> 

Bạn vẫn cần sự phụ thuộc, và bạn cần thêm thư viện trong danh sách các khung công tác và thư viện của Link Phase.

EDIT: Apple bây giờ nói về một số phiên bản Xcode 4 mà bạn có thể chỉ cần sử dụng cờ liên kết này: "-ObjC" để nhận thư viện có danh mục tải đúng cách. Lá cờ đó đang làm việc tốt cho tôi trong Xcode 5. Mọi người vẫn đang bỏ phiếu cho câu trả lời này, nhưng tôi nghi ngờ rằng cờ -ObjC là giải pháp tốt nhất hiện nay.

+0

Cờ -ObjC vi phạm một số khung –

+0

@AlexanderVasenin đó là một tuyên bố khá tốt, bạn nên sao lưu nó bằng các liên kết đến bài đăng ở đây hỗ trợ nó. Cá nhân tôi chưa bao giờ nghe điều này cho đến bây giờ. –

+0

Ví dụ: [link 1] (http://www.personagraph.com/ios#faq19), [link 2] (https://www.parse.com/questions/linker-flag-objc-causes-build- để thất bại) –

8

Điều này phù hợp với tôi. Giống như các câu trả lời ở trên, bạn vẫn cần phải bao gồm thư viện trong dự án.

-force_load $(SRCROOT)/pathToLibraryFromProject/libname.a 

Đối với đường dẫn, đó chỉ là thư mục trong dự án dẫn đến nơi bạn đặt thư viện, ví dụ BaseFoler/Subfolder/libName.a.

+0

Điều này làm việc cho tôi. Chỉ nhập URL tương đối đã không hoạt động đối với tôi. vì vậy tôi phải nhập URL tuyệt đối để nó hoạt động. Đây là trên Xcode 8.3, Swift 3 –

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