【问题标题】:Discovery of Dynamic library dependency on Mac OS & Linux发现 Mac OS & Linux 上的动态库依赖
【发布时间】:2023-03-31 18:50:01
【问题描述】:

在 Windows 上,有一个工具 Depends.exe 来发现 EXE/DLL 文件对其他 DDL 的依赖关系。哪个命令行工具在 Mac OS 和 Linux 上是等效的?

【问题讨论】:

    标签: windows linux macos dependencies


    【解决方案1】:
    • Mac OS X:otool-L文件
    • Linux:ldd文件

    如果这些命令不能提供您想要的,在 Mac OS X 上,您可以使用 otool-lfile 转储所有加载命令。在 Linux 上,您可以使用 readelf -d file 转储动态部分的全部内容。

    【讨论】:

    • 静态库呢?我尝试了otool -L,但所做的只是列出一堆用于构建库的 .o 文件。
    • @user3055655:链接时会创建动态库依赖项。由于尚未链接静态存档库,因此它不会有任何动态库依赖项。
    【解决方案2】:

    您还可以尝试 MacDependency (https://github.com/kwin/macdependency),它为 MacOS X 上的 otool 提供了 UI 替代品。它还显示了完整的依赖关系树和导出的符号。

    【讨论】:

      【解决方案3】:

      在终端中尝试 ldd。这将为您提供二进制文件所需的动态库列表。

      【讨论】:

      • 感谢您的及时回复!它很简单: ldd /path/to/executable_or_dylib 和详细版本: ldd -v /path/to/executable_or_dylib
      • 它完美运行于可执行文件。当我在 Ubuntu 9.04 中运行 ldd aDynamicLib.so 时,它说:“不是动态可执行文件”。如何发现 .so 文件的依赖关系?提前谢谢!
      【解决方案4】:

      你可以在你的 bashrc 中加入类似以下的内容,这样你就可以始终使用“ldd”作为接口,但如果机器是 mac,它将重定向 macos 等效的接口。

      # Macos equivalent of ldd
      if [[ "$OSTYPE" =~ "darwin"* ]]
      then
        alias ldd="otool -L"
      fi
      

      【讨论】:

        猜你喜欢
        • 2010-12-01
        • 2011-09-19
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多