2008-12-07 38 views
16

Có thư viện nguồn mở mà tôi muốn sử dụng cho ứng dụng iPhone của mình. Thư viện được viết bằng C và biên dịch với Makefiles. Tôi muốn sử dụng một thư viện tĩnh.Tạo thư viện tĩnh cho iPhone

Nếu tôi thêm tệp .a vào phụ thuộc dự án của tôi, nó hoạt động tốt với trình mô phỏng, nhưng nó không liên kết khi nhắm mục tiêu SDK iPhone (chắc chắn vì tệp .a được biên dịch cho nền tảng Intel).

Cờ biên dịch GCC nào tôi nên sử dụng để biên dịch một thư viện tĩnh cho SDK iPhone? Tôi nghĩ rằng tùy chọn '-arch' sẽ cung cấp cho tôi kiến ​​trúc iPhone nhưng không may mắn.

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

3

Thử biên dịch bằng arm-apple-darwin-gcc làm ứng dụng GCC của bạn. Sau đó bạn có thể sử dụng lipo để kết hợp 2 thư viện tĩnh (cánh tay và 386) với nhau để phát triển trên sim so với thiết bị liền mạch.

+0

Cảm ơn thông tin. Tôi vẫn đang cố gắng làm cho thư viện biên dịch với arc-apple-darwin-gcc ... –

1

Sau nhiều lần thử sử dụng trình biên dịch GCC cánh tay với các mẹo được cung cấp here, tôi đã từ bỏ. Trong trường hợp của tôi, đơn giản hơn rất nhiều khi đơn giản là chuyển thư viện sang XCode hơn là cố gắng biên dịch một thư viện tĩnh cho iPhone.

6

Đối với thư viện dựa autoconf, tôi sẽ bỏ phiếu cho Christopher Stawarz của xây dựng kịch bản:

http://pseudogreen.org/blog/build_autoconfed_libs_for_iphone.html

Với kịch bản này, bạn có thể tự động hóa toàn bộ quá trình với lệnh duy nhất, và dễ dàng đưa ra với những chương trình thư viện cho nhau nền tảng, chẳng hạn như iPhoneOS 2.0/2.1/2.2/2.2.1 và iPhoneSimulator 2.0/2.1/2.2/2.2.1.

Tuy nhiên, do the change of Xcode 3.1, cài đặt xây dựng $ (SDKROOT) đã trở thành một số tên ngắn như "macosx10.5", "iphoneos2.2.1" hoặc "iphonesimulator2.2.1". Vì vậy, cách ông đã đề cập trong bài viết về việc thiết lập đường dẫn tìm kiếm trong Xcode cho thư viện và tiêu đề sẽ không hoạt động (trong Xcode 3.1). Bạn sẽ cần phải mã cứng đường dẫn của chính mình.

+2

Bất kỳ ai có câu trả lời gần đây cho vấn đề này? – Alper

1

Chỉ cần biên dịch thông thường bằng sd x86 (giả lập iphone), sau đó lại sử dụng nền tảng cho arm/ios (arm-xxx-xxx), sau đó kết hợp cả hai lib tĩnh trong a .a bằng cách sử dụng "LIPO" (công cụ dòng lệnh)). Làm việc một điều trị và nó đơn giản hơn tái phát minh bánh xe (ít nhất là cho những libs smallish) .... tôi đã làm điều đó với liblo và libdmtx và tôi không có bất kỳ vấn đề và nó đã cho tôi như 10 phút để làm cả hai ... :-)

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