Câu trả lời:
Một .a
tập tin là một thư viện tĩnh, trong khi một .so
tập tin là một đối tượng chia sẻ (động) thư viện tương tự như một DLL trên Windows. Có một số thông tin chi tiết về sự khác biệt giữa hai trên trang này .
.a
chỉ có thể được bao gồm như là một phần của chương trình trong quá trình biên dịch. .so
Có thể được "nhập" trong khi chương trình tải.
ar
tiện ích. Thêm thông tin ở đây
Theo sau, một tệp .a là một kho lưu trữ "ar". Không giống như một kho lưu trữ tar, nó lưu trữ các tệp .o hoặc đối tượng, cho phép chúng được rút ra khỏi kho lưu trữ và được liên kết thành một chương trình, trong số những thứ khác. Bạn có thể sử dụng ar để lưu trữ các tệp khác nếu bạn muốn.
Ví dụ, bạn có thể lấy danh sách các thành viên của tệp ar với tham số -t:
ar -t /usr/lib/libc.a
Tệp .so là tệp "đối tượng chia sẻ" và có nhiều thông tin hơn có sẵn cho trình liên kết để các thành viên có thể được liên kết đến một chương trình tải càng nhanh càng tốt.
Ví dụ: thử:
objdump -T /lib/libc-2.11.1.so
.
Thật thú vị, một tập tin .so cũng có thể là một chương trình chính thức. Chẳng hạn, thử chạy /lib/libc.so.6 . (Đáng buồn thay, phần cuối cùng này dường như không hoạt động trên các hệ thống hiện đại hơn. Không phải đó là một mất mát lớn.)
ar -t /usr/lib/libc.a
. Trên thực tế, -
điều này dường như không cần thiết trong trường hợp này. Cũng /lib/libc.so.6.
chỉ in một số đầu ra. Tôi không biết nếu tôi sẽ gọi nó là a full fledged program
.
ldd
trên .so, và nó sẽ cho bạn thấy những thư viện khác mà nó sử dụng. Tĩnh sẽ trở lại với một thông báo nói rằng nó không phải là một thư viện động.