是否有可能(如果是的话,如何)确定应用程序在运行时使用的应用程序的共享库?基本上,我可以以编程方式获取输出ldd
吗?首选的 C/C++ 解决方案不只是跳转到命令行上执行 ldd。
doAction()
考虑以下几点:我有一个从共享库调用的驱动程序应用程序libfoo
。我编译了一次应用程序,然后设置LD_LIBRARY_PATH
到一个适当的目录,其中包含定义libfoo
了doAction()
符号的 a 。这样,我可以doAction()
在不同libfoo
的 s 中有多个实现,但只能编译一次应用程序。
一个真实世界的例子是教授有一个学生的班级实施doAction()
。学生无需针对每个学生的实现编译测试工具,而是doAction()
提交一个共享库,教授可以简单地更改LD_LIBRARY_PATH
以评估每个学生。
我获取当前正在使用的库的目标是md5sum
在运行时对库执行 an 以确保调用正确的库。在人为设计的示例中,所有学生都将提交md5sum
他们的库,教授可以将正在运行的可执行文件 + 共享库(数据库查找,日志到文件,...)匹配给学生,以防止设置意外LD_LIBRARY_PATH
影响另一个学生的成绩(忘记切换LD_LIBRARY_PATH
到 David 的目录并再次使用 Bill 的目录运行libfoo
)。