Câu hỏi này đã được hỏi trước đây, nhưng đào sâu vào tài liệu cho các công cụ phát triển khác nhau có vẻ như là là có thể, không rõ ràng.Cách tạo thư viện tĩnh cho iOS mà không cần đặt tất cả các ký hiệu công khai
Động lực: Tạo thư viện tĩnh để các nhà phát triển iOS khác sử dụng. Một số biểu tượng trong thư viện sẽ gây ra vấn đề nếu xuất khẩu vì vậy tôi muốn làm cho chúng trở thành biểu tượng chỉ dành cho nội bộ. Với thư viện động, điều này thật dễ dàng, chỉ cần sử dụng đối số -exported_symbols_list
libtool
(ld
) và liệt kê những đối tượng bạn muốn công khai. Tài liệu libtool
sẽ không cho phép đối số này cho các thư viện tĩnh.
Thư viện có một số tệp ObjectiveC .m sử dụng mã từ nhau. Chỉ một lớp trong nhóm cần được công khai cho người dùng của tệp thư viện tĩnh cuối cùng.
Đã thử libtool -exported_symbols_list publicsymbols.exp
nhưng đối số đó cho libtool
không được hỗ trợ với -static
cho thư viện tĩnh.
Không thể đặt biểu tượng ở chế độ riêng tư với các thuộc tính (nếu điều đó thậm chí hoạt động) vì chúng là cần thiết bởi các tệp .m khác trong nhóm.
trông giống như ld
thể mất vài file .o và liên kết chúng lại với nhau thành một file .o mới (thông qua đối số -r
) và nó không có "năng động chỉ" từ chối trách nhiệm cho lập luận -exported_symbols_list
(mà chỉ có thể là tài liệu không rõ ràng ...).
cũng giống như một thử nghiệm tôi xây dựng dự án của tôi với Xcode vì vậy tôi đã tất cả các file .o thực hiện, và sau đó cố gắng gọi ld
trên dòng lệnh, như vậy:
ld -r -x -all_load -static -arch armv6 -syslibroot {path}
-filelist /Users/Dad/ABCsdk/iphone-ABClib/build/ABCLib.build/Distribution-iphoneos/ABCLib-device.build/Objects-normal/armv6/ABCsdk.LinkFileList
-exported_symbols_list {exp file path} -o outputfile.o
nơi {path} loại mọi thứ có đường dẫn dài đến những nơi thích hợp trong đó.
nhưng tôi nhận được lỗi như sau:
/usr/bin/ld_classic: /Users/Dad/ABCsdk/iphone-ABClib/build/ABCLib.build/Distribution-iphoneos/ABCLib-device. xây dựng/Đối tượng bình thường/ARMv6/ABCmain.o không tương thích, tập tin chứa loại không được hỗ trợ của phần 3 (_ TEXT, _picsymbolstub4) trong lệnh tải 0 (phải ghi rõ "-dynamic" sẽ được sử dụng)
nên có điều gì đó có vẻ sai ở đó ...
Bất cứ ai cũng biết một cách thông minh để thực hiện công việc này? Cảm ơn.
Bạn cần ẩn biểu tượng nào? – Macmade
Các ký hiệu có thể xung đột nếu chúng có cùng thư viện con đã được liên kết với ứng dụng của chúng (JSONkit nói). Tôi có thể, rõ ràng, chỉ cần bao gồm các tệp JSONKit và nói để bao gồm chúng cũng nếu chúng chưa có trong dự án của bạn, nhưng tôi hy vọng một tệp .h và .a duy nhất sẽ được thêm vào dự án để tích hợp sạch hơn . – Dad