Tôi đã biên dịch chéo một số công cụ Linux (và một số mã C của riêng tôi) cho Android và một trong những thách thức mà tôi phải đối mặt là libc của Android có một số thành phần bị thiếu/bị tước Tôi kết thúc vá mã của tôi để làm cho nó hoạt động với libc của Android (ví dụ như một vấn đề như thế này http://credentiality2.blogspot.com/2010/08/compile-ncurses-for-android.html)Liên kết tĩnh tĩnh và liên kết động với glibc
Q1: Làm thế nào để tôi liên kết tĩnh với glibc (và các phụ thuộc khác) trong khi biên dịch chéo với chuỗi công cụ cánh tay (hoặc ndk-build)?
Q2: Bạn có nên liên kết tĩnh với glibc cho các tệp nhị phân cho Android không? Tôi có nên mong đợi bất cứ điều gì để phá vỡ nếu tôi bắt đầu liên kết tĩnh? Có bất kỳ vấn đề hiệu năng/bộ nhớ nào không?
Tôi hiểu hầu hết những ưu và nhược điểm của tĩnh vs liên kết động từ ở đây - C++ application - should I use static or dynamic linking for the libraries? và Static linking vs dynamic linking
Vì vậy, tôi muốn biết nếu tôi nên liên kết tĩnh glibc cho Android khi cross-biên dịch mã nhị phân.
Nó không chỉ sử dụng trên đĩa - cũng sử dụng trong bộ nhớ được tăng lên. Khi bạn liên kết và các thư viện jni của ứng dụng Android chống lại Bionic libc, bạn thừa hưởng quyền truy cập chỉ đọc được chia sẻ vào một bản sao đã có trong bộ nhớ. –
Bạn có thể chỉ cho tôi nguồn thông tin về điều này không? Tôi muốn biết nhiều hơn, nhưng không thể tìm thấy bất cứ điều gì về điều này. Tôi biết rằng nếu các thư viện chứa bất kỳ dữ liệu nào, dữ liệu có vẻ không được chia sẻ giữa các tiến trình, tuy nhiên đó có thể chỉ là một trường hợp sao chép trên bản ghi của các trang bộ nhớ nếu mã thư viện thay đổi các biến dữ liệu nội bộ của nó. – Samveen
Tôi tin rằng ChrisStratton đề cập đến - trường hợp cho libc được liên kết tĩnh. Mỗi quá trình sẽ kết thúc với toàn bộ bản sao của TẤT CẢ các phần của cùng một thư viện. Với liên kết động, bạn chính xác @Samveen – Tuxdude