根据/ bin / chgrp上的ldd linux命令,执行它的唯一必需库是libc.so.当使用gdb调试chgrp时,我注意到其他库实际上已加载,例如:
/lib/x86_64-linux-gnu/libnss_compat.so.2
/lib/x86_64-linux-gnu/libnsl.so.1
/lib/x86_64-linux-gnu/libnss_nis.so.2
/lib/x86_64-linux-gnu/libnss_files.so.2
为什么这些库在ldd输出中不进行比较?
另外:他们没有在libc.so的DYNAMIC部分进行比较,它们是如何定位和加载的? (我用readelf检查了libc.so的DYNAMIC部分,这些库不在那里)
答案 0 :(得分:3)
运行程序时,libnss
通过dlopen
动态加载各种libc
库。加载哪些库取决于/etc/nsswitch.conf
的内容。有关详细信息,请参阅Name Service Switch documentation。