Có thể tải thư viện từ bộ nhớ thay vì từ hệ thống tập tin trên mac/gcc không?Tải thư viện động từ bộ nhớ
Với cửa sổ tôi đang sử dụng MemoryModule nhưng rõ ràng nó không tương thích với nhiều nền tảng.
Có thể tải thư viện từ bộ nhớ thay vì từ hệ thống tập tin trên mac/gcc không?Tải thư viện động từ bộ nhớ
Với cửa sổ tôi đang sử dụng MemoryModule nhưng rõ ràng nó không tương thích với nhiều nền tảng.
Trước tiên, để thực hiện việc này, tôi khuyên bạn nên đọc số OS X ABI Dynamic Loader Reference.
Để thực hiện việc này, bạn phải sử dụng API NSCreateObjectFileImageFromMemory.
Đưa con trỏ đến tệp Mach-O trong bộ nhớ, hàm này tạo và trả về tham chiếu
NSObjectFileImage
. Triển khai hiện tại chỉ hoạt động với các gói, vì vậy bạn phải xây dựng tệp thực thi Mach-O bằng tùy chọn liên kết-bundle
.Khối bộ nhớ
address
điểm đến, phải được cấp phát vớivm_allocate
(/usr/include/mach/vm_map.h
).
Đảm bảo tuân theo yêu cầu vm_allocate
được sử dụng cho khối bộ nhớ chứa mô-đun.
Khi bạn có được tệp hình ảnh đối tượng, bạn phải sử dụng hàm NSLinkModule để liên kết mô-đun vào chương trình.
Khi bạn gọi hàm này, tất cả thư viện được tham chiếu bởi mô-đun đã cho sẽ được thêm vào danh sách tìm kiếm thư viện. Trừ khi bạn vượt qua
NSLINKMODULE_OPTION_PRIVATE
,NSLinkModule
sẽ thêm tất cả các biểu tượng toàn cầu trong mô-đun vào danh sách biểu tượng chung.
Sau khi liên kết, đừng quên dọn dẹp bằng cách gọi hàm NSDestroyObjectFileImage.
Khi chức năng này được gọi, nạp năng động gọi
vm_deallocate
(/usr/include/mach/vm_map.h
) trên bộ nhớ được trỏ đến bởi các tham sốobjectFileImage
.
Lưu ý rằng mặc dù các chức năng này không được chấp nhận, không có sự thay thế (theo hiểu biết tốt nhất của tôi) bằng cách sử dụng phương án được đề xuất dlopen
et. al.
có thể trùng lặp của [dlopen từ bộ nhớ?] (Http://stackoverflow.com/questions/5053664/dlopen-from-memory) –
@JonathonReinhart - Không hoàn toàn. Đó là yêu cầu làm thế nào để 'hack' 'dlopen' (* cụ thể *) để tải từ bộ nhớ. Tôi đang tự hỏi về bất kỳ cách nào khác có thể để làm điều đó. – Qix