我想获得一个可执行文件需要加载才能运行的动态库列表。我想以编程方式执行此操作(即,我不会询问有关运行ldd
)的信息。我看到了各种工具,例如libtool,但不清楚是否有可能将它们用于此目的;如果是,那么如何。
答案 0 :(得分:1)
您的问题是针对特定操作系统的,并且您没有说出您感兴趣的操作系统。
假设您对ELF
感兴趣,可以阅读可执行文件的.dynamic
部分,查找.d_tag == DT_NEEDED
条目。这些条目的.d_ptr
将包含.dynstr
部分的偏移量,其中包含所需共享库的名称。您可以通过运行readelf -d a.out
来查看此解码版本。
一旦你知道需要哪些库,你就必须复制ld.so
的搜索规则才能真正找到它们(一般来说这会非常复杂),然后为每个库重复这个过程。图书馆依次。
是否有支持正确执行此操作的库?
任何这样的库很快就会过时,除非它是装载器本身的一部分。此功能 由加载程序通过ldd
提供。
所以你应该三思而后行避免ldd
(它究竟有什么问题?)