Страница 1 из 1
Не работает GCC
Добавлено: 24 мар 2022, 21:46
OlegMakr
Попытался на домашнем компе проверить работу gcc. Компьютер Kernel: 5.4.0-96-generic x86_64 bits: 64 compiler: gcc v: 9.3.0. В Synaptic пишет, что gcc установлен, но при компиляции пишет:
mach.c:1:10: fatal error: stdio.h: Нет такого файла или каталога
1 | #include <stdio.h>
| ^~~~~~~~~
compilation terminated.
Что делать?
Не работает GCC
Добавлено: 24 мар 2022, 21:50
rogoznik
OlegMakr, изучить тему
Панель форматирования текста в темах/ответах чтоб нормально оформлять сообщения
Покажи полностью код который хочешь компилять.
Покажи команду, которой компиляешь
Не работает GCC
Добавлено: 25 мар 2022, 21:06
OlegMakr
Какая разница какой код?
Не работает GCC
Добавлено: 25 мар 2022, 21:46
OlegMakr
Переустановил gcc и все заработало. Странно что при установке системы gcc устанавливается, но без файлов *.h.
Почему? Это сделано специально? Если кто нибудь знает ответ сообщите.
Не работает GCC
Добавлено: 26 мар 2022, 06:27
vir0id
OlegMakr писал(а): ↑25 мар 2022, 21:46
Странно что при установке системы gcc устанавливается, но без файлов *.h
"При установке" системы, её нужно обновлять, как бы. А уж потом всё остальное делать.
Не работает GCC
Добавлено: 26 мар 2022, 08:41
rogoznik
А зачем заголовочные файлы нужны?
Правильно для разработки.
А они нужны каждому пользователю?
Нет.
Так нужны они после установки системы?
Нет.
Не работает GCC
Добавлено: 26 мар 2022, 13:05
slant
rogoznik писал(а): ↑26 мар 2022, 08:41
А зачем заголовочные файлы нужны?
Правильно для разработки.
Для разработки нужны исходники.

А заголовочные файлы - для компиляции стороннего кода, если этот код должен взаимодействовать с уже написанным.
rogoznik писал(а): ↑26 мар 2022, 08:41
А они нужны каждому пользователю?
Нет.
Но нужны для универсальности самой системе. Без них модули ядра не собрать даже автоматически. А модуль ядра собирать, скажем, тому же virtualbox или vmware нужно бывает (самый известный пример). Чтобы работал DKMS они тоже нужны.
rogoznik писал(а): ↑26 мар 2022, 08:41
Так нужны они после установки системы?
Нет.
Но их наличие в системе крайне приветствуется. Они всегда в пакете linux-headers-<совпадает с пакетом текущего ядра>
Не работает GCC
Добавлено: 26 мар 2022, 16:45
vir0id
slant писал(а): ↑26 мар 2022, 13:05
Без них модули ядра не собрать даже автоматически.
Так это же заголовки которые требуют свою версию ядра, а не... к примеру,
что_то_там_написал_на_си.h
.
Для этого отдельные заголовки, разве нет?
Не работает GCC
Добавлено: 26 мар 2022, 18:39
rogoznik
slant, так речь то шла не про ядерные исходники/хидерсы, а про сишные. Они нафиг не нужны в системе рядовому пользователю. И понадобятся они только если нужно что-то собрать, написанное на с/с++ или что-то сам пишешь на с/с++(ну и естественно собираешь)
Не работает GCC
Добавлено: 26 мар 2022, 18:56
slant
Заголовки есть заголовки. Есть у тебя исходник, или только уже скомпилированная либа - это все равно будет .h файл с заголовками. Механизм общий. Нужен чтобы из твоего кода вызывать классы и функции написанные до тебя (ну и еще кое-что). Основным набором такого добра в unix является системная библиотека glibc. Требуется она в общем то практически для всего. Без нее получится запустить разве что само ядро, и ничего больше. Но своего отдельного пакета с заголовками у нее нету (насколько помню). Эти заголовки входят в комплект linux-headers, т.к перекликаются еще и с функциями самого ядра.
Могу наврать с положением, т.к. не отслеживаю эти тонкости постоянно - я не пишу регулярно на C/C++. Но с точки зрения админа - нужно иметь в системе (если она deb-based) хотя бы пакеты linux-headers и build-essentials - сильно экономит нервы.
Рядовому пользователю эти пакеты 100% не нужны в единственном случае - у него уже все стоит, железо не обновляется, DKMS не работает, сторонний софт (не из официальной репы) ставится не будет в принципе. Вот тогда - да, можно без заголовков в системе обходится. В остальных случаях - лучше иметь в наличии.
Не работает GCC
Добавлено: 26 мар 2022, 19:18
vir0id
slant писал(а): ↑26 мар 2022, 18:56
Без нее получится запустить разве что само ядро, и ничего больше. Но своего отдельного пакета с заголовками у нее нету (насколько помню)
Я могу скомпилить свой сишник без linux-headers
rogoznik писал(а): ↑26 мар 2022, 18:39
Они нафиг не нужны в системе рядовому пользователю
А походу они подтягиваются сами, когда ты ставишь компилятор. Может в разных дистрибутивах поведение разное, т.е там - подтягиваются, а там - нет.
Не работает GCC
Добавлено: 26 мар 2022, 21:30
slant
vir0id писал(а): ↑26 мар 2022, 19:18
Я могу скомпилить свой сишник без linux-headers
Вопрос лишь в том, что твой сишник делает. Т.е. к каким либам обращается. Так то можно ведь и вообще без include программу написать - весь функционал накодить самолично без единого стороннего вызова.
vir0id писал(а): ↑26 мар 2022, 19:18
А походу они подтягиваются сами, когда ты ставишь компилятор. Может в разных дистрибутивах поведение разное, т.е там - подтягиваются, а там - нет.
Вполне вероятный вариант.
Не работает GCC
Добавлено: 29 мар 2022, 20:48
OlegMakr
Напоминаю, что gcc это и есть компилятор программ Си и во всех linux-ах он устанавливается по умолчанию. По крайней мере так пишут в описаниях. В synaptic стояла птичка, что gcc установлен. Я удалил его и установил снова, и все заработало.
Не работает GCC
Добавлено: 29 мар 2022, 21:03
WWolf
OlegMakr, значит до этого что-то грохнул неподумав...