【问题标题】:How to find what library was used during a program execution?如何查找程序执行期间使用的库?
【发布时间】:2015-07-07 20:04:12
【问题描述】:

我想知道在程序执行期间实际使用了哪些库和外部代码。我正在使用 Inkscape 的源代码,并对将 svg 转换为 png 的命令行功能感兴趣。我想去掉这个执行路径中不需要的所有依赖项。 我目前正在使用 gcov,但到目前为止只告诉我有关 Inkscape 的代码。 我的开发环境是Windows 2008,mingw gcc包。

谢谢。

【问题讨论】:

  • 我看到你唯一能做的就是尝试提取你感兴趣的部分并尝试编译它并按需添加依赖项,二进制文件实际上会在执行时加载所有内容,而不仅仅是需要部分 AFAIK,我会推荐 ImageMagick 或任何图像处理库,因为使用库从头开始编写代码会更容易。
  • 我的回忆(因此不是答案)在 gdb 下运行会告诉您何时打开动态库。

标签: c gcc mingw


【解决方案1】:

Process Explorer 将显示在运行时加载的所有库,包括静态库和动态库。它还会向您显示在运行时主动触摸的所有句柄。

如果您的路径设置正确,您还可以从 UI 生成和监控进程。

当然,如果你有源代码,你可以在编译时搜索链接选项,检查 makefile。对于运行时,在 gdb 中对 LoadLibrary 方法进行断点。此外,gdb 还有一个 'info sharedlibrary' 命令可以使用。

【讨论】:

  • Process Monitor 还可以显示打开了哪些文件,以及访问了哪些注册表项。了解检查了哪些文件有助于您了解加载给定库的原因。
【解决方案2】:

如果您在 MinGW 下有 ldd,请使用它:
ldd executable 或者您可以使用
objdump -p | grep DLL 甚至
gprof

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2014-02-27
    相关资源
    最近更新 更多