构建依赖树 如何使用C++构建依赖树?例如,我所说的依赖关系树是指检查某个程序运行所需的文件。通过检查,我可以找到是否有任何丢失或损坏的文件

构建依赖树 如何使用C++构建依赖树?例如,我所说的依赖关系树是指检查某个程序运行所需的文件。通过检查,我可以找到是否有任何丢失或损坏的文件,c++,dependencies,C++,Dependencies,我怎么做那样的事 编辑: 我不是在找一个适合我的程序> P>没有依赖于计算依赖关系的跨平台方法,因为这实际上不是C++问题。它与编译器输出的可执行文件格式有关,在每个平台上都不同 在Linux(可能还有其他Unice)上,该命令是您想要的。这将打印出可执行文件所需的(递归)模块,并告诉您当前可以在系统上找到这些模块的位置 在Windows上,是一个优秀的图形工具,可以让您浏览可执行文件(或另一个DLL)所依赖的所有DLL。在谈论Windows时,这只是一个建议:您可以编写一个模块,捕获所有打开、

我怎么做那样的事

编辑:


我不是在找一个适合我的程序

> P>没有依赖于计算依赖关系的跨平台方法,因为这实际上不是C++问题。它与编译器输出的可执行文件格式有关,在每个平台上都不同

在Linux(可能还有其他Unice)上,该命令是您想要的。这将打印出可执行文件所需的(递归)模块,并告诉您当前可以在系统上找到这些模块的位置


在Windows上,是一个优秀的图形工具,可以让您浏览可执行文件(或另一个DLL)所依赖的所有DLL。

在谈论Windows时,这只是一个建议:您可以编写一个模块,捕获所有打开、读取、写入等调用。。。从应用程序中删除一个文件,并生成请求的文件列表,可能会过滤标准输入/输出、端口、设备等文件

在Linux上也可以这样做(这比在Windows上更容易)

无论如何,我不知道如何构建层次结构(树)。
以防万一:您可以将此解决方案与另一个解决方案(如ldd、dep walker等)结合使用。

谢谢,我知道该工具,但我正在寻找自己的方法。当然,我不需要像这个工具这么复杂的东西。我只想建立一个非常基本的依赖项列表。假设你想对可执行文件而不是源代码执行此操作,那么你需要指定平台(编译后,你关心的是可执行文件的格式,而不是源代码语言)。我需要跨平台使用它。我假设所需文件是指DLL和库?由于不同平台的二进制格式不兼容,您可能会发现每个平台搜索一个工具更容易(对于windows
Dependency Walker
是一个很好的工具)。当然,这只检测对其他库的依赖性。如果要查找程序需要运行的所有文件(如图像文件等,以及在运行时动态加载的库),没有简单的方法可以做到这一点,因为这些文件不是在编译时确定的。在Linux上,
strace
(grep
open
的输出)告诉您进程在运行时打开的所有文件,但当然它只告诉您程序的特定运行情况,而不是它将尝试打开的所有可能文件。但这仍然不能告诉我如何在Windows上实际构建依赖关系树(让我们暂时忘记Linux,因为我的大多数用户都在Windows上)我可以用一个工具来做,但我正在寻找如何编写一个C++程序,可能是使用一个库。我不知道你在Windows上会怎么做。在Linux上,这很容易,因为LDD是一个命令行工具。你可以打开一个socket到LDD并读取它出来的文本。在Windows上,人们通常会构建GAR工具。e无法以编程方式访问。如果您需要有关此问题的一般信息,请使用google
Windows API hook
搜索。上有Rem女士的优秀文章,但不幸的是,这些文章是用俄语写的。此外,我还发现专门为此编写的库,但我从未使用过。如果您需要更具体的答案,请(具体如何编写,可以使用哪些API函数等)创建一个新问题或给我发邮件:)如果你可以使用这个模块来构建依赖关系树,我真的需要知道如何编写它。我想我会给你发邮件。你的电子邮件是什么?谢谢!注意,我们这里有两个完全不同的建议:小心不要混淆它们。静态方法(ldd、dep walker等)只获得库,但总是有效的。动态方法(catch calls to open)获取所有文件,但只获取在该测试运行中碰巧打开的文件,因此它并不总是有效。