Je sais qu'un .so
fichier est une sorte de bibliothèque dynamique (de nombreux threads peuvent partager de telles bibliothèques, il n'est donc pas nécessaire d'en avoir plus d'une copie en mémoire). Mais quelle est la différence entre .a
et .la
? S'agit-il uniquement de bibliothèques statiques?
Si les bibliothèques dynamiques ont de gros avantages par rapport aux bibliothèques statiques, pourquoi y a-t-il encore beaucoup de bibliothèques statiques?
Je veux également connaître le mécanisme sous-jacent pour charger les bibliothèques (les deux types) et comment un morceau de code dans une bibliothèque est invoqué lorsqu'il est utilisé quelque part. Quelle partie du noyau dois-je étudier? Et quelle commande / utilitaire Linux connexe dois-je connaître pour savoir comment un processus s'exécute? (Je ne connais que la ld
commande maintenant)
Quand dois-je essayer de construire du code dans .so
ou .a
? Quel est le meilleur?
[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