1
  1. Cygwin запускает только исполняемые файлы Windows? Когда я запускаю программу ELF внутри Cygwin, работающей в Windows 10, она говорит, что

    $ ./wkhtmltopdf
    -bash: ./wkhtmltopdf: cannot execute binary file: Exec format error
    
    $ file wkhtmltopdf
    wkhtmltopdf: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter
    /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.18,
    BuildID[sha1]=b6566a9e44c43a0eebf18d8c1dc6cb616801a77e, stripped
    
  2. Предоставляет ли Cygwin реализации этих распространенных утилит linux в виде исполняемых файлов Windows с тем же базовым именем, но с добавлением .exe качестве имени расширения?

  3. Может ли Cygwin запускать какие-либо собственные исполняемые файлы Windows или большинство из них?

Благодарю.

2 ответа2

6

С https://www.cygwin.com/

Cygwin это:

  • большая коллекция инструментов GNU и Open Source, которые предоставляют функциональность, аналогичную дистрибутиву Linux в Windows.

  • DLL (cygwin1.dll), которая обеспечивает существенную функциональность POSIX API.

Cygwin не является:

  • способ запуска собственных приложений Linux на Windows. Вы должны пересобрать приложение из исходного кода, если хотите, чтобы оно работало в Windows.
  • способ волшебным образом заставить собственные приложения Windows осознавать такие функции UNIX®, как сигналы, ptys и т. д. Опять же, вам нужно создать свой
    приложения из источника, если вы хотите воспользоваться Cygwin
    функциональность.

Итак, о ваших вопросах:

  1. Вы не можете запустить ELF на Windows. Для этого вам нужна виртуальная машина с Linux
  2. Cygwin предоставляет утилиты Unix, но некоторые могут иметь то же имя, что и Windows. Exe расширение поддерживается для совместимости.
  3. да. Программы Cygwin также Windows
  4. да. Программы Cygwin могут запускать обычные программы Windows (не-Cygwin).
1

cygwin запускает программы, запускаемые из cmd.exe. Таким образом, программы cmd.exe можно запускать из cygwin.exe, а программы cygwin.exe - из cmd.exe.

Даже до такой степени, что вы даже можете воспользоваться утилитой cygwin, которую вы почти никогда не запускаете в обычном режиме с помощью cmd.exe, и вы можете запустить ее

C:\cygwin\bin>chmod --help
Usage: chmod [OPTION]... MODE[,MODE]... FILE...
  or:  chmod [OPTION]... OCTAL-MODE FILE...

Вы даже можете запустить блокнот из Cygwin

user@comp ~
$ notepad.exe a.a


user@comp ~
$ xcopy /?
Copies files and directory trees.

XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]

Вы можете попробовать dir, хотя он запускает реализацию cygwin, которая похожа на ls.

user@comp ~
$ where dir
C:\cygwin\bin\dir.exe

user@samsung350 ~
$ dir
a         adfff           dfds      gg2.exe             r.php

Тогда можно было бы спросить, каковы различия между реализациями cygwin и cmd.exe. Два различия, с которыми я столкнулся - Вообще реализации утилит cygwin предпочтут LF, а не CRLF. И в некоторых случаях могут быть разработаны больше для использования с одинарными кавычками, а не с двойными кавычками.

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