Tag: ldd

通过运行应用程序以编程方式确定正在使用的共享库

是否有可能(以及如果是这样,如何)确定应用程序在运行时使用的应用程序的共享库? 基本上,我可以通过编程方式获得ldd的输出吗? 首选的C / C ++解决方案不仅仅是跳转到命令行执行ldd。 请考虑以下内容:我有一个驱动程序应用程序从共享库libfoo调用doAction() 。 我编译应用程序一次,然后将LD_LIBRARY_PATH设置为包含定义了doAction()符号的libfoo的相应目录。 这样,我可以在不同的libfoo有多个doAction()实现,但只能编译一次应用程序。 一个现实世界的例子是教授有一类学生实现doAction() 。 学生不是为每个学生的doAction()实现编译测试工具,而是提交一个共享库,教授可以简单地改变LD_LIBRARY_PATH来评估每个学生。 我获取当前正在使用的库的目标是在运行时对库执行md5sum以确保我调用正确的库。 在人为设计的例子中,所有学生都会提交他们图书馆的md5sum ,教授可以将正在运行的可执行文件+共享库(数据库查找,登录文件,…)与学生相匹配,以防止设置LD_LIBRARY_PATH影响另一个人时发生意外学生的成绩(忘记将LD_LIBRARY_PATH更改为David的目录并使用Bill的libfoo再次libfoo )。