2

Как я могу определить (в сценарии Python или в любой другой среде сценариев), является ли программа, которую я должен вызвать, исполняемым файлом Windows или скомпилированным с помощью cygwin1.dll. Я в среде cygwin для этого.

2 ответа2

3

Если вы находитесь в среде cygwin, вы можете использовать команду ldd , она вернет зависимости исполняемого файла, смотрите:

  • Зависимости ls.exe, 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

Он вернет 1, если $ PROGRAM содержит зависимость с cygwin1.dll

1

Используйте инструмент оболочки 'cygpath', чтобы найти полный путь к исполняемому файлу в стиле cygwin. Затем определите, с чего начинается этот путь.

У меня нет Cygwin, чтобы проверить это; поэтому нет примера.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .