фатальная ошибка: stdio.h: нет такого файла или каталога - PullRequest
0 голосов
/ 30 декабря 2018

У меня проблема с #include <stdio.h> на Mac Mojave 10.14.1

У меня есть компилятор gcc по умолчанию вместе с другими компиляторами gcc.

DorothyeMacBook:Desktop dorothy$ which gcc
/usr/local/bin/gcc

Версия

DorothyeMacBook:Desktop dorothy$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-apple-darwin15.6.0/7.1.0/lto-wrapper
Target: x86_64-apple-darwin15.6.0
Configured with: ../gcc-7.1.0/configure --enable-languages=c++,fortran
Thread model: posix
gcc version 7.1.0 (GCC) 

Теперь я нахожусь в пути: / Users / Дороти / Рабочий стол

У меня есть stdio.h в lib

DorothyeMacBook:Desktop dorothy$ find /usr -name "stdio.h"
find: /usr/sbin/authserver: Permission denied
/usr/local/include/c++/7.1.0/tr1/stdio.h
/usr/local/include/c++/4.9.2/tr1/stdio.h
/usr/local/lib/gcc/x86_64-apple-darwin15.6.0/7.1.0/include/ssp/stdio.h
/usr/local/lib/gcc/x86_64-apple-darwin14.0.0/4.9.2/include/ssp/stdio.h
/usr/local/Cellar/gcc/8.2.0/include/c++/8.2.0/tr1/stdio.h
/usr/local/Cellar/gcc/8.2.0/lib/gcc/8/gcc/x86_64-apple-darwin18.2.0/8.2.0/include/ssp/stdio.h
/usr/local/Cellar/gcc/8.2.0/lib/gcc/8/gcc/x86_64-apple-darwin18.2.0/8.2.0/include-fixed/stdio.h

Однако, когда я скомпилирую файл по текущему пути / Users / dorothy / Desktop Terminal, я получу ошибку:

DorothyeMacBook:Desktop dorothy$ gcc  inverse.c -o inv
inverse.c:1:10: fatal error: stdio.h: No such file or directory
 #include <stdio.h>
          ^~~~~~~~~
compilation terminated.

Ответы [ 2 ]

0 голосов
/ 22 июня 2019

@ Джонатан Леффлер прав.Apple сделала еще один большой торт для нас.Поскольку / usr / include был перемещен (теперь он находится в /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include после установки инструментов командной строки), старые версии gcc build не могут найти самый нижний уровень includeфайлы это является проблемой.(Что там у них в голове) Так что только вы разработчик и используете / usr / include?

Это НЕ Unix-like.

Вот что случилось.Для gcc-4.9 (gcc-4.9 и gcc-9 ниже - все brew gcc.) Следующие пути поиска включают:

enter ignoring nonexistent directory "/usr/include"
#include "..." search starts here:
#include <...> search starts here:
.
/usr/local/include
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
/usr/local/Cellar/gcc@4.9/4.9.4_1/lib/gcc/4.9/gcc/x86_64-apple-darwin17.3.0/4.9.4/include
/usr/local/Cellar/gcc@4.9/4.9.4_1/include
/usr/local/Cellar/gcc@4.9/4.9.4_1/lib/gcc/4.9/gcc/x86_64-apple-darwin17.3.0/4.9.4/include-fixed
/System/Library/Frameworks
/Library/Frameworks
End of search list. here

Существует файл системного уровня stdio.h, поэтому stdio.hне может быть найден.

Проблема в:

inverse.c:1:10: fatal error: stdio.h: No such file or directory
#include <stdio.h>
      ^~~~~~~~~
compilation terminated.

is :

См. /usr/local/Cellar/gcc@4.9/4.9.4_1 / lib / gcc / 4.9 / gcc / x86_64-apple-darwin17.3.0 / 4.9.4 / include / ssp / stdio.h

#ifndef _SSP_STDIO_H
#define _SSP_STDIO_H 1

#include <ssp.h>
#include_next <stdio.h>

# include_next означает включение следующего имени stdio.hэтот просто гид.

Дайте устаревший выстрел.cp все файлы в /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include to /usr/local/Cellar/gcc@4.9/4.9.4_1/lib/gcc/4.9/gcc/x86_64-apple-darwin17.3.0 / 4.9.4 / include-fixed, gcc-4.9 снова будет работать.

Но для gcc-9 проблема пути в порядке.См .:

#include "..." search starts here:
#include <...> search starts here:
.
/usr/local/include
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include # key path
/usr/local/Cellar/gcc/9.1.0/lib/gcc/9/gcc/x86_64-apple-darwin18/9.1.0/include
/usr/local/Cellar/gcc/9.1.0/lib/gcc/9/gcc/x86_64-apple-darwin18/9.1.0/include-fixed
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks
End of search list.

На самом деле эту ошибку можно просто исправить, переустановив инструменты командной строки xcode, после этого gcc-4.9 снова заработает.

0 голосов
/ 25 января 2019

Мне все еще не удается связать gcc с stdio.h на моем Mac.Тем не менее, я нашел альтернативный способ компиляции программы с помощью gcc.Я набрал brew install gcc в своем терминале, это означает, что будет установлен новый gcc8.0.2. (В моем случае, я не знаю, какой gcc вы получите) Затем я использую gcc-8 вместо gcc для компиляции моей программы.,Таким образом, вызывается новый gcc8.0.2.

Вы можете проверить имя команды для вариантов gcc, перейдя в / usr / local / bin. Все имена команд gcc перечислены там.Что касается меня, это g ++
g ++ - 8
gcc
gcc-8

Если у вас есть дополнительные вопросы, вы можете связаться со мной, и я дам более подробную информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...