2012-12-06 27 views
13

Khi xây dựng thư viện tĩnh khách quan-c, tôi nhận thấy rằng tệp .a (tệp chất béo từ trình mô phỏng và iPhone) là khá lớn. Đặc biệt, ban đầu nó là 5.7mb. Tôi tìm thấy this post và đặt cài đặt bản dựng của tôi Generate Debug Symbols thành Không, giảm kích thước lib xuống 1.7mb.Thực hành tốt nhất để giảm kích thước của các thư viện tĩnh trong mục tiêu-c là gì?

Đây là một cải tiến lớn, nhưng có điều gì khác có thể thực hiện được không? Các tập tin thực thi và tiêu đề một mình chiếm ~ 100kb.

Trả lời

16

Trong trường hợp đó là một phần quan tâm của bạn, một thư viện tĩnh chỉ là các tệp .o có liên quan được lưu trữ cùng với một số sổ sách kế toán. Vì vậy, một thư viện tĩnh 1.7mb - ngay cả khi mã bên trong nó là toàn bộ 1.7mb - thường sẽ không thêm 1.7mb vào sản phẩm của bạn. Các quy tắc thông thường về việc xóa mã chết sẽ được áp dụng.

Ngoài ra, bạn có thể giảm kích thước mã được tạo. Sau đây có thể không phải là một danh sách toàn diện.

Trong cài đặt xây dựng của mục tiêu, hãy tìm 'Cấp độ tối ưu hóa'. Bằng cách chuyển đổi thành 'Nhanh nhất, Nhỏ nhất -O', bạn sẽ cho phép trình biên dịch hy sinh một số tốc độ cho kích thước.

Đảm bảo bạn đang xây dựng ngón tay cái, mã ARM nhỏ gọn hơn. Giả sử bạn đang sử dụng LLVM có nghĩa là đảm bảo bạn không có -mno-thumb ở bất kỳ đâu trong cài đặt dự án của mình.

Đồng thời xem xét các kiến ​​trúc mà bạn muốn xây dựng. Apple không cho phép gửi ứng dụng hỗ trợ cả màn hình ARMv6 và iPhone 5 và đã giảm hoàn toàn hỗ trợ ARMv6 từ Xcode mới nhất. Vì vậy, có lẽ không có điểm kể cả điều đó vào thời điểm này.

+0

+1 để chỉ ra rằng kích thước của librarie sẽ không thêm chính xác vào kích thước nhị phân vì mối liên kết thường sẽ tối ưu hóa thời gian lớn. – Till

+0

Cảm ơn, @Tommy. Điều đó làm rõ mọi thứ lên rất nhiều – johngraham

+0

@Tommy Điều gì đã xảy ra nếu người dùng chỉ định -all_load hoặc -force_load? – klefevre

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