2009-03-08 23 views
7

Tôi đang viết một thư viện tĩnh cho iPhone và tôi tự hỏi liệu những gì tôi đang làm được khuyến nghị hay tôi nên thực hiện một cách tiếp cận khác.Cách thích hợp để liên kết với các thư viện từ thư viện cho iPhone/CocoaTouch

Thư viện tĩnh tôi đang viết phụ thuộc vào libxml2. libxml2 có một thư viện động (dylib) và một thư viện tĩnh (a). Tôi đã thử hai cách tiếp cận.

Tiếp cận một - Khi tôi cố gắng để liên kết chống lại thư viện tĩnh bằng cách thêm "-lxml2" thành "lá cờ mối liên kết khác" xây dựng không thành công với thông báo sau:

/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/libtool: file: -lxml2 is not an object file (not allowed in a library) 

Tiếp cận hai - Tôi thành công có thể liên kết chống lại các thư viện động từ thư viện tĩnh của tôi nhưng tôi không chắc chắn nếu điều này được cho phép (hoặc cách tiếp cận thích hợp) trên iPhone. Mặc dù tôi đang xây dựng một thư viện tĩnh, Apple có cho phép các thư viện tĩnh liên kết với các thư viện động không? Tôi vẫn đang học về các thư viện tĩnh, nhưng từ sự hiểu biết của tôi mã từ dylib sẽ được kết hợp với mã của tôi để tạo một thư viện, do đó liên kết với dylib không phải là một vấn đề.

Để tóm tắt: [? Xây dựng, nhưng là này chính xác và có thể chấp nhận]

  • mylibrary.a - -> libxml2.a [Không làm việc]
  • mylibrary.a> libxml2.dylib

Trả lời

-8

Apple không cho phép bạn liên kết khung công tác và/hoặc thư viện khác với khung được cung cấp cùng với SDK.

Marco

+1

Thực ra, XCode cho phép điều này tốt. Tuy nhiên, trong trừu tượng hơn, StackOverflow phải là một nơi để nhanh chóng và dễ dàng tìm thấy * câu trả lời đúng *! Nếu bạn không biết, hoặc bạn không chắc chắn, xin vui lòng không đăng bài như một câu trả lời. Đặt câu hỏi làm rõ trong phần bình luận, hoặc thực hiện một số nghiên cứu cho đến khi bạn * làm * biết câu trả lời đúng! :) – Olie

8

libxml2.dylib có sẵn trong SDK. Cách phải là nhấp đúp vào nút/ứng dụng đích trong Xcode và sau đó nhấp vào Chung + trong "Thư viện được liên kết" ... bạn sẽ tìm thấy libxml2.dylib trong danh sách đó.

0:42 trong số này Screencast bạn có thể xem cách CoreGraphics được thêm vào dự án.

+0

Phải. Tôi hiểu * cách * liên kết. Câu hỏi của tôi là nó là tiêu chuẩn thích hợp để liên kết với các thư viện bên ngoài từ các thư viện tĩnh? Bạn thực hiện một điểm tốt mặc dù, một trong đó tôi loại bỏ qua. Libxml2.dylib được phân phối với SDK, do đó có thể được cho phép. – Caged

+1

Tôi khuyên bạn không nên liên kết với libs tĩnh của dylibs có sẵn từ SDK. Chúng có thể được sử dụng bởi khung công tác khác và bạn có thể gặp phải các vấn đề về phiên bản, ví dụ: Foundation.framework thực hiện kéo trong libxml2 – epatel

0

Bạn không thể liên kết tĩnh các thư viện với các thư viện tĩnh khác. Đây là lý do tại sao các khung công tác và thư viện phụ thuộc vào các thư viện tĩnh khác yêu cầu người tiêu dùng thêm chúng theo cách thủ công vào giai đoạn xây dựng Liên kết nhị phân với thư viện hoặc cài đặt xây dựng Cờ kết nối khác.