Tôi biết một .so
tệp là một loại thư viện động (rất nhiều luồng có thể chia sẻ các thư viện đó vì vậy không cần phải có nhiều hơn một bản sao của nó trong bộ nhớ). Nhưng sự khác biệt giữa .a
và là .la
gì? Có phải tất cả các thư viện tĩnh?
Nếu libs động có lợi thế lớn so với tĩnh, tại sao vẫn còn nhiều thư viện tĩnh?
Tôi cũng muốn biết cơ chế cơ bản để tải các thư viện (cả hai loại) và cách một đoạn mã trong lib được gọi khi nó được sử dụng ở đâu đó. Tôi nên học phần nào của nhân? Và tôi nên biết lệnh / tiện ích liên quan đến Linux nào để biết quy trình đang chạy như thế nào? (Tôi chỉ biết ld
lệnh bây giờ)
Khi nào tôi nên cố gắng xây dựng mã thành .so
hay .a
? Cái nào tốt hơn?
[mirror@home ins_openvpn]$ ls lib/openvpn/plugins/ -l
total 96
-rw-r--r-- 1 mirror mirror 22892 Sep 2 23:25 openvpn-plugin-auth-pam.a
-rwxr-xr-x 1 mirror mirror 931 Sep 2 23:25 openvpn-plugin-auth-pam.la
-rwxr-xr-x 1 mirror mirror 23621 Sep 2 23:25 openvpn-plugin-auth-pam.so
-rw-r--r-- 1 mirror mirror 17228 Sep 2 23:25 openvpn-plugin-down-root.a
-rwxr-xr-x 1 mirror mirror 932 Sep 2 23:25 openvpn-plugin-down-root.la
-rwxr-xr-x 1 mirror mirror 18805 Sep 2 23:25 openvpn-plugin-down-root.so