我们可以用ldd来确定的依赖,比如:在静态/动态链接的情况下,lib依赖如何写入ELF可执行文件的.dynamic部分?
[email protected]: ldd `which date`
linux-vdso.so.1 => (0x00007fff0f5fd000)
librt.so.1 => /lib64/librt.so.1 (0x00002b2f7ea50000)
libc.so.6 => /lib64/libc.so.6 (0x00002b2f7ec59000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b2f7efb1000)
/lib64/ld-linux-x86-64.so.2 (0x00002b2f7e832000)
由于“日期”依赖“libc.so”,我认为在“libc.so”指出,“日期”调用一些功能,我们知道该ldd可以确定从可执行文件的.dynamic部分的“日期”的lib依赖,但我的问题是如何编译器/链接器知道应该写入.dynamic部分?更具体地讲:
如果“libc.so”静态与“日期”链接,则该函数的代码应该已经汇编成“日”,所以在这种情况下,“日期”不应该依赖于“libc.so”,在.dynamic部分中不应该有“libc.so”。
如果 “libc.so” 动态带 “日期” 相连,在这种情况下,我假定一些这样的代码:
手柄= dlopen的( “libc.so”,.. );
应该存在于“date”中以加载“libc.so”,并且“dlopen(”libc.so“)”应该是“date”依赖于“libc.so”的唯一线索,在这种情况下,编译器/链接器如何知道“日期”取决于“libc.so”?它解析所有的“dlopen”行来提取lib依赖吗?我不认为这是一个好方法,但是真的,这是真的吗?
或者编译器/链接器有其他方法来确定动态链接情况下的lib依赖?谢谢。