Я знаю, что файл .so
- это разновидность динамической библиотеки (много потоков могут совместно использовать такие библиотеки, поэтому нет необходимости иметь более одной копии в памяти). Но в чем разница между .a
и .la
? Все эти статические библиотеки?
Если динамические библиотеки имеют большие преимущества перед статическими, почему все еще есть много статических библиотек?
Я также хочу знать базовый механизм загрузки библиотек (оба вида) и того, как кусок кода в lib вызывается, когда он используется где-то. Какую часть ядра я должен изучать? И какую связанную команду/утилиту Linux я должен знать, чтобы знать, как работает процесс? (Я знаю только команду ld
)
Когда я должен попытаться создать код в .so
или .a
? Какой из них лучше?
[[email protected] 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