我如何确定(在 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 来测试这个;因此没有例子。