2015-01-07 6 views
1

У меня 64-разрядный Cygwin на моем 64-битном Win7.
Я установил gcc-core и gcc-g ++ пакеты.
Я сделал простую программу C:Cygwin gcc не найден stdio.h

#include <stdio.h> 
int main() { 
    exit(0); 
} 

, когда я компилирую с: gcc-c test.c я получил:
fatal error: stdio.h: No such file or directory

Делать это с -v флагом я вижу:

#include "..." search starts here: 
#include <...> search starts here: 
/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/include 
/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/include-fixed 
/usr/include 
/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../lib/../include/w32api 
End of search list. 
GNU C (GCC) version 4.8.3 (x86_64-pc-cygwin) 

stdio.h который поставляется с пакетом gcc-core, присутствующим на моем компьютере в этом месте (что отлично в соответствии с пакетом Cygwin's se Арчер также):
/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/include/ssp/stdio.h

Что это означает, что ssp каталог и почему stdio.h находится там?
Почему gcc не может найти stdio.h в этом месте?

+0

Я предполагаю, что ваш фактический исходный файл имеет '#include ', а не '#include <stdio.h>'. Я исправил форматирование вашего вопроса; убедитесь, что он по-прежнему точным. И 'exit' требует' #include ', хотя это не является причиной вашей проблемы. –

+0

Вы должны добавить каталог include как Wumpus Q. Wumbley указал: это не тот файл, который вы хотите. – JoshuaBehrens

+0

@Keith Thompson: вы правы, я сделал ошибку, пока я редактировал сообщение – wildfrontier

ответ

3

Файл, который вы нашли в каталоге ssp, не является версией <stdio.h>. Он содержит только дополнительную информацию о некоторых из функций в <stdio.h> для функции защиты стоп-бит в gcc.

Фактический <stdio.h> должен быть в /usr/include.

Эта строка в вашем -v выходе очень интересно:

/usr/inlude 

Как вы получите /usr/inlude без каких-либо c?

К сожалению, в inlude недостающее c было удалено в редактировании Кита Томпсон.

Так что ваш gcc должен найти /usr/include/stdio.h, если он у вас есть. Это там? Насколько я могу судить по спискам файлов пакетов, он должен быть частью базовой системы cygwin (т. Е. Даже если вы не установили компилятор, он должен быть там).

Вам не хватает каких-либо других файлов заголовков? <stdlib.h> и <string.h> являются хорошими кандидатами на тестирование.

Вот некоторые команды, чтобы исследовать пакет Cygwin и содержит ли файл:

cygcheck -f /usr/include/stdio.h 
cygcheck -c cygwin 
cygcheck -l cygwin | grep stdio 

UPDATE: так что кажется, я за раз и есть cygwin-devel пакет. Файлы заголовков уже не находятся в базе cygwin. Для того, чтобы проверить правильность пакета на последнем Cygwin, вы будете использовать

cygcheck -c cygwin-devel 

как уже сделано в комментариях. И поскольку он указан как «неполный», возможно, это решение переустановит его с помощью программы установки cygwin.

Смежные вопросы