Использование Cygwin для компиляции программы на C; Ошибка выполнения - PullRequest
15 голосов
/ 18 июня 2009

Я зачислен на курс магистра компьютерных наук. Курс использует C, и преподаватель хочет, чтобы мы использовали Cygwin для компиляции программ, если мы используем Windows.

Я скачал и установил Cygwin и убедился, что установил компилятор GCC .

Но я не знаю, куда идти отсюда. Мне нужно скомпилировать один исходный файл с базовым включением.

#include <stdio.h> 

Предположим, что файл находится на моем рабочем столе (это не так, но ради аргумента). Как перейти на рабочий стол из оболочки bash? Я предполагаю, что, как только я перешел в правильное местоположение в bash, я просто выполняю:

gcc myProgram.c -o myProgram

Обновление : Следуя различным инструкциям, опубликованным ниже, я смог скомпилировать программу; Я благодарю вас за это. Но когда я выполняю полученный бинарный файл, я получаю следующее. Как я могу скомпилировать или выполнить эту программу, чтобы я не получил ошибку? Еще раз спасибо.

This application has failed to start because cygwin1.dll was not found. Re-installing the application may fix this problem.

Ответы [ 12 ]

14 голосов
/ 18 июня 2009

когда вы запускаете в cygwin, вы находитесь в вашем $ HOME, как и в общем случае в unix, который по умолчанию соответствует c: / cygwin / home / $ YOURNAME. Таким образом, вы можете положить все там.

Вы также можете получить доступ к диску c: из cygwin через / cygdrive / c / (например, / cygdrive / c / Documents and Settings / ваше имя / рабочий стол).

9 голосов
/ 18 июня 2009

Относительно вашего обновленного вопроса о отсутствует cygwin1.dll .

Из проверки терминала Cygwin,

ls /usr/bin/cygwin1.dll

Если его нет (я сомневаюсь в этом), ваша установка выполнена неправильно.

Затем проверьте ваш путь,

echo $PATH

Это даст : разделенный список путей. Он ДОЛЖЕН содержать /usr/bin. Если вы обнаружите, что пропали без вести, добавьте его,

export PATH=/usr/bin:$PATH

Наконец,

  • Я надеюсь, что вы используете Cygwin из терминала cygwin (маленький зеленый + черный значок, установленный вместе с Cygwin) или MinTTY (если вы его установили).
  • И вы не переместили скомпилированный EXE-файл на другой компьютер, на котором не установлен Cygwin (если вы это сделаете, вам потребуется перенести cygwin1.dll на этот компьютер - сохраните его в той же папке, скомпилированный EXE).
4 голосов
/ 18 июня 2009

Что касается ошибки cygwin1.dll not found, решение, которое я использовал не менее 8 лет, заключается в добавлении каталогов Cygwin bin в конец моего %PATH% в разделе «Мой компьютер» -> «Свойства» -> «Дополнительно» -> «Переменные среды». , Я добавляю их в конец пути, поэтому в моей обычной работе они ищутся последними, что сводит к минимуму вероятность конфликтов (фактически у меня не было проблем с конфликтами за все это время).

Когда вы вызываете Cygwin Bash Shell, эти каталоги добавляются к %PATH%, поэтому в этой среде все работает так, как задумано.

Когда не запускается в оболочке Cygwin, мой %PATH%:

Path=c:\opt\perl\bin; \
     ...
     C:\opt\cygwin\bin; \
     C:\opt\cygwin\usr\bin; \
     C:\opt\cygwin\usr\local\bin;

Таким образом, например, Perl ActiveState Perl сначала обнаруживается, когда я не в оболочке Cygwin, но Perl Cygwin обнаруживается, когда я работаю в оболочке Cygwin.

4 голосов
/ 18 июня 2009

Подводя итог, приведу несколько команд, которые переходят в каталог и компилируют код с использованием Cygwin и Windows Vista:

  1. Запустите оболочку Cygwin.
  2. В командной строке введите cd, чтобы перейти в соответствующий каталог:

    $ cd / cygdrive / c / Users / nate / Desktop

  3. Используйте ls для просмотра списка файлов в каталоге:

    $ ls

    prog.c

  4. Используйте команду gcc для компиляции файла в этом каталоге:

    $ gcc prog.c -o prog

  5. Если вы не видите ошибок, вы сможете запустить получившуюся программу:

    $ ./prog

Обновление:

При ошибке "Cygwin1.dll not found" мне нравится ответ Ника. Вы также можете проверить этот связанный пост о cygwin1.dll не найден , который предлагает добавить c:\cygwin\bin\ в ваш Windows PATH.

Есть инструкции о том, как изменить переменную PATH Windows для Windows XP, и в Vista я думаю, что она похожа.

  1. Перейти в Панель управления -> Система
  2. Выбрать Расширенные настройки системы
  3. Нажмите на вкладку Дополнительно
  4. Нажмите Переменные среды
  5. Под Системные переменные , найдите запись Path и нажмите Edit
  6. Добавьте c:\cygwin\bin в список, обязательно отделяя его от всех предыдущих пунктов точкой с запятой
4 голосов
/ 18 июня 2009

Ищите (то есть cd до)

/cygdrive/c/

это обычно будет ваш C:\


Также посмотрите на Используя Cygwin , введение Lifehacker (июнь / 2006) и эту страницу с биомедией в PhysioNet .

2 голосов
/ 18 июня 2009

Если вас не устраивает bash, вы можете продолжить работу в стандартной командной оболочке Windows (т.е. DOS).

Чтобы это работало, вы должны добавить C: \ cygwin \ bin (или локальную альтернативу) в переменную PATH Windows.

После этого вы можете: 1) Откройте командную (DOS) оболочку 2) Измените каталог на местоположение вашего кода (c :, затем cd path \ to \ file) 3) gcc myProgram.c -o myProgram

Как уже упоминалось в ответе nik, документация "Использование Cygwin" - отличное место, чтобы узнать больше.

1 голос
/ 10 сентября 2009

Если вы просто выполните gcc program.c -o program -mno-cygwin, он будет прекрасно скомпилирован, и вам не нужно будет добавлять cygwin1.dll к вашему пути, и вы можете просто пойти дальше и распространить свой исполняемый файл на компьютер. на котором не установлен Cygwin, и он все равно будет работать. Надеюсь, это поможет

1 голос
/ 18 июня 2009

Путь Windows C:\src под Cygwin становится /cygdrive/c/src

0 голосов
/ 17 июня 2018

Этот файл (cygwin1.dll) является зависимостью cygwin, аналогичной qt dependency. Вы должны скопировать этот файл и подобные файлы, которые появляются в таких сообщениях об ошибках, из «cygwin / bin» в папку вашей программы. Также это необходимо работать на другом компьютере, на котором нет cygwin!

0 голосов
/ 18 июня 2009

Cygwin очень крутой! Вы можете компилировать программы из других систем (например, Linux), , и они будут работать . Я говорю о коммуникационных программах или даже о веб-серверах.

Вот один трюк. Если вы просматриваете свой файл в проводнике Windows, вы можете ввести «cd» в окнах bash, затем перетащить из адресной строки проводника в окно cygwin, и полный путь будет скопирован! Кстати, это работает и в командной оболочке Windows.

Кроме того: хотя "cd / cygdrive / c" является формальным путем, он также примет "cd c:" в качестве ярлыка. Возможно, вам придется сделать это, прежде чем перетаскивать оставшуюся часть пути.

Файл stdio.h должен быть найден автоматически, как в обычной системе.

...