Я знаю, що .so
файл є своєрідною динамічною бібліотекою (безліч потоків можуть обмінюватися такими бібліотеками, тому не потрібно мати більше однієї копії його в пам'яті). Але в чому різниця між .a
і .la
? Це все статичні бібліотеки?
Якщо динамічні ліфти мають великі переваги перед статичними, чому все ще існує багато статичних бібліотек?
Я також хочу знати основний механізм завантаження бібліотек (обох видів) і те, як викликається фрагмент коду в lib, коли він десь використовується. Яку частину ядра я повинен вивчити? І які пов'язані команди / утиліти Linux я повинен знати, щоб знати, як працює процес? (Я ld
досі знаю команду)
Коли я повинен спробувати вбудувати код у .so
або .a
? Який з них кращий?
[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