Запуск исполняемых файлов C ++, скомпилированных в Cygwin на Windows - PullRequest
2 голосов
/ 17 января 2012

Идея
Я скомпилировал C ++ exe, используя G ++ на Cygwin, и я хочу иметь возможность получать выходные данные этого exe в мой HTML через PHP. То есть, допустим, у меня есть исполняемый файл C ++ "test.exe", который выводит "Hello, World!" когда беги. Тогда, по логике, я должен быть в состоянии сделать

<?=exec("./test.exe")?>

Чтобы отправить вывод файла test.exe в файл.

Выпуск
Я тестирую это на локальном сервере WAMP на Win7. По-видимому, вызовы exec и system на Win7 WAMP проходят через командную строку Windows, что означает, что он запускает пакетную, а не bash. По какой-то причине пакет не любит скомпилированные Cygwin исполняемые файлы, что выдает ошибку:

"Программа не может запуститься, потому что cygwin1.dll отсутствует в вашем компьютер. Попробуйте переустановить программу, чтобы решить эту проблему. "

Итак, как я могу сделать так, чтобы пакет Windows мог выполнять скомпилированные Cygwin файлы?

Ответы [ 3 ]

3 голосов
/ 17 января 2012

Вы могли бы сделать несколько вещей:

  1. Вы можете скомпилировать свое приложение с помощью Visual Studio (я думаю, что Microsoft предоставляет бесплатную версию ... Visual Studio Express ). Этот маршрут я бы лично выбрал. Вам не нужно полагаться на DLL-библиотеку cygwin (если вы не компилируете какую-то часть установки cygwin), и ваш исполняемый файл будет гораздо более переносимым в системах Windows.
  2. Вы можете поместить местоположение cygwin1.dll в системную переменную среды PATH. Это имеет преимущество в том, что будущие исполняемые файлы, созданные с использованием Cygwin, будут работать успешно, но имеет тот недостаток, что если вы захотите распространять свое приложение, другие пользователи не смогут запустить его из коробки.
  3. Вы можете скопировать cygwin1.dll из каталога / bin вашей установки cygwin в ту же папку, что и ваш исполняемый файл. Это переносимо (среди систем Windows ... до некоторой степени), но имеет недостаток, заключающийся в том, что может нарушать лицензию Cygwin (не читая лицензию, я не уверен). Я бы рекомендовал этот маршрут только для целей тестирования.
3 голосов
/ 17 января 2012

"Программа не может запуститься, потому что cygwin1.dll отсутствует на вашем компьютере. Попробуйте переустановить программу, чтобы решить эту проблему."

Хорошо, сообщение об ошибке здесь довольно ясно,Исполняемые файлы, скомпилированные с Cygwin, нуждаются в запуске cygwin1.dll.Самый простой способ - просто скопировать этот cygwin1.dll в тот же каталог, что и ваш исполняемый файл, чтобы он мог его найти.

Если вы не слишком помешаны на этой зависимости, попробуйте вместо этого создать свой привет мир с MinGWу которого нет таких зависимостей.

2 голосов
/ 17 января 2012

Скопируйте cygwin1.dll в каталог, содержащий test.exe

См. Программа не может запуститься из-за отсутствия cygwin1.dll ... в Eclipse CDT

...