确定可执行文件是否为本机 Windows 或 cygwin1.dll

确定可执行文件是否为本机 Windows 或 cygwin1.dll

我如何确定(在 Python 脚本或任何其他脚本环境中)我必须调用的程序是本机 Windows 可执行文件还是使用 cygwin1.dll 编译的。我在 cygwin 环境中。

答案1

如果您在 cygwin 环境中,您可以使用ldd命令,它将返回可执行文件的依赖项,请参阅:

  • 依赖执行文件,cygwin1.dll 是依赖项
    $ ldd /bin/ls.exe
            ntdll.dll => /mnt/c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffd413d0000)
            KERNEL32.DLL => /mnt/c/WINDOWS/System32/KERNEL32.DLL (0x7ffd40af0000)
            KERNELBASE.dll => /mnt/c/WINDOWS/System32/KERNELBASE.dll (0x7ffd3e570000)
            cygintl-8.dll => /usr/bin/cygintl-8.dll (0x3e8b40000)
            cygwin1.dll => /usr/bin/cygwin1.dll (0x180040000)
            cygiconv-2.dll => /usr/bin/cygiconv-2.dll (0x3f2300000)
  • 依赖C:/Windows/System32/control.exe,cygwin1.dll 不是依赖项
    $ ldd c:/Windows/System32/control.exe
            ntdll.dll => /mnt/c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffd413d0000)
            KERNEL32.DLL => /mnt/c/WINDOWS/System32/KERNEL32.DLL (0x7ffd40af0000)
            KERNELBASE.dll => /mnt/c/WINDOWS/System32/KERNELBASE.dll (0x7ffd3e570000)
            ADVAPI32.dll => /mnt/c/WINDOWS/System32/ADVAPI32.dll (0x7ffd40d30000)
            msvcrt.dll => /mnt/c/WINDOWS/System32/msvcrt.dll (0x7ffd40520000)
[...]

您还可以执行以下行:

ldd $PROGRAM | grep cygwin1.dll | wc -l

如果 $PROGRAM 包含对 cygwin1.dll 的依赖,它将返回 1

答案2

使用 'cygpath' shell 工具来查找可执行文件的完整 cygwin 样式路径。然后检测该路径以什么开头。

我没有 cygwin 来测试这个;因此没有例子。

相关内容