Sous Linux, pourquoi les stubs sont-ils requis pour les bibliothèques standard?Dans les stubs Linux sont utilisés pour les bibliothèques standard. Pourquoi les talons sont-ils requis?
Répondre
Les talons sont nécessaires pour assurer la liaison correcte d'un exécutable entre différentes versions de Linux sans créer les fichiers objets.
Par exemple: Soit a l'exécutable que nous construisons:
gcc -o a test.o test1.o test2.o -lz
Dans l'un exécutable de cas ci-dessus a une dépendance à l'égard libz.so (-lz
est de créer un lien avec libz.so). L'éditeur de liens résout libz.so en utilisant LD_LIBRARY_PATH.
Voyons maintenant le problème:
In RHEL4(Linux Zseries):
objdump -T /usr/lib64/libz.so.1 | grep stack_chk
In RHEL5(Linux ZSeries);
objdump -T /usr/lib64/libz.so.1 | grep stack_chk
0000000000000000 DF UND 0000000000000031 GLIBC_2.4 __stack_chk_fail
En RHEL5, nous voyons un symbole non défini dans le libz.so. Sauf si nous passons libc à l'éditeur de liens après lz dans la commande ci-dessus, cela ne peut pas être résolu. Stubs: Si nous générons le stub pour libz.so, en empaquetant tous les symboles de libz.so dans une bibliothèque de bout et un lien avec la bibliothèque de stub au lieu de la bibliothèque réelle, nous ne voyons aucune erreur:
ligne de liaison modifié:
gcc -o a test.o test1.o test2.o -L/home/lib/stubs/ -lz
Dans le répertoire/home/lib/talons, nous avons une bibliothèque stub pour libz.so par nom libzstub.so. Le lieur attribue une priorité plus élevée au chemin indiqué dans la commande link que LD_LIBRARY_PATH.
Maintenant, même si nous lions dans la version RHEL5, l'éditeur de liens résout les symboles pour libz.so à partir du répertoire/home/lib/stubs.
Ici, j'ai utilisé les détails de configuration des boîtes. Le chargeur prend en charge le chargement de la fonction correspondante lors de l'exécution.
RHEL5:
libcmpiutil-0.4-2.el5
glibc-utils-2.5-42
libc-client-2004g-2.2.1
libcap-1.10-26
libcap-1.10-26
libchewing-devel-0.3.0-8.el5
libchewing-0.3.0-8.el5
libcxgb3-1.2.3-1.el5
libcap-devel-1.10-26
glibc-common-2.5-42
libcxgb3-static-1.2.3-1.el5
libcroco-devel-0.6.1-2.1
compat-glibc-headers-2.3.4-2.26
libcroco-0.6.1-2.1
compat-libcom_err-1.0-7
libcmpiutil-devel-0.4-2.el5
compat-glibc-2.3.4-2.26
glibc-headers-2.5-42
glibc-devel-2.5-42
libcap-devel-1.10-26
libc-client-2004g-2.2.1
libcmpiutil-0.4-2.el5
libcroco-0.6.1-2.1
libc-client-devel-2004g-2.2.1
glibc-2.5-42
libchewing-devel-0.3.0-8.el5
libcroco-devel-0.6.1-2.1
compat-libcom_err-1.0-7
libc-client-devel-2004g-2.2.1
libchewing-0.3.0-8.el5
libcxgb3-1.2.3-1.el5
libcmpiutil-devel-0.4-2.el5
glibc-2.5-42
glibc-devel-2.5-42
compat-glibc-2.3.4-2.26
RHEL4:
rpm -qa | grep libc
glibc-2.3.4-2.41
libcxgb3-1.1.4-1.el4
libc-client-2002e-14
libcroco-0.6.0-4
libcap-devel-1.10-20
glibc-kernheaders-2.4-9.1.103.EL
compat-libcom_err-1.0-5
glibc-devel-2.3.4-2.41
compat-glibc-2.3.2-95.30
compat-libcom_err-1.0-5
glibc-common-2.3.4-2.41
libcroco-devel-0.6.0-4
libcxgb3-1.1.4-1.el4
libc-client-2002e-14
glibc-utils-2.3.4-2.41
libcap-1.10-20
glibc-headers-2.3.4-2.41
glibc-profile-2.3.4-2.41
libcxgb3-static-1.1.4-1.el4
glibc-devel-2.3.4-2.41
compat-glibc-2.3.2-95.30
- 1. Quels sont les ticks utilisés pour PHP?
- 2. Quels sont les algorithmes d'ordonnancement utilisés par le noyau Linux?
- 3. Quels sont les | et^opérateurs utilisés pour?
- 4. Quels sont les ports requis pour les appels DNS WMI?
- 5. Problème de compilation dans les bibliothèques x86_64 standard
- 6. C RPC sans les stubs
- 7. Quelles sont les fonctions de programmation réseau/les extraits de code les plus utilisés?
- 8. Où sont les bibliothèques Erlang?
- 9. Motifs de conception: quels sont les nouveaux, où sont utilisés les modèles existants?
- 10. Quels sont les algorithmes utilisés par les SGBDR?
- 11. Quelles sont les ressources ou les outils utilisés pour gérer les données temporelles dans les magasins de valeurs-clés?
- 12. Quels sont les scripts utilisateur Xcode les plus couramment utilisés?
- 13. Inclure les bibliothèques standard Python dans votre distribution
- 14. Quels sont les types de chaînes les plus utilisés en C++ et comment les convertir?
- 15. Quelles sont les bibliothèques de graphes de qualité pour C?
- 16. Quels sont les dll Externals requis par mon application?
- 17. Quels sont les fichiers requis pour un projet Visual Studio?
- 18. Les droits d'administrateur local sont-ils requis pour installer Silverlight?
- 19. Quels sont les algorithmes courants utilisés pour rand() de C?
- 20. où sont les cadres pour créer des bibliothèques?
- 21. Conversion UTF-8 avec les bibliothèques standard C++ (no/clr)
- 22. Que sont les bibliothèques WebDAV compatibles J2ME?
- 23. où sont les bibliothèques de grails spécifiées
- 24. Les bibliothèques graphiques CMJN sont-elles?
- 25. Quels sont les programmes RoR utilisés dans ce tutoriel?
- 26. Pourquoi les bibliothèques standard pour C# ont-elles besoin à la fois d'une référence d'assembly et d'une importation?
- 27. Lua .NET Comment utiliser les bibliothèques standard et tierces
- 28. Les bibliothèques jdic 64 bits sont-elles disponibles pour solaris?
- 29. Intégrer les bibliothèques C++ dans les bibliothèques .Net
- 30. Pourquoi les commentaires imbriqués sont-ils interdits?