Но где находятся C заголовочные файлы?
Вы можете узнать, где g cc ожидает их по
echo '#include <stdio.h>' | gcc -xc - -H -v -fsyntax-only
Часть -v
будет печатать пути поиска, такие как
#include "..." search starts here:
#include <...> search starts here:
/home/...
/usr/local/include
...
Часть -H
будет печатать, какие заголовочные файлы в действительности используются:
. /usr/include/stdio.h
.. /usr/include/x86_64-linux-gnu/bits/libc-header-start.h
... /usr/include/features.h
etc.
Какой адрес я должен предоставить опцию -I
при компиляции программы C?
Пути, где расположены заголовки вашего проекта C, если они не находятся в текущем каталоге. Для простых проектов вам не нужно -I
: при компиляции module.c
будет найдено #include "module.h"
, если оба файла находятся в одном каталоге.
Правильный вариант для указания дополнительного пути к системному заголовку: -isystem
однако, установка должна найти системные заголовки без какого-либо дополнительного взлома , то есть предполагаемые пути поиска должны быть перечислены в #include <...> search starts here:
и без установки -isystem
.
Установщик установил их в другом месте? Реализации
lib c (такие как glib c или Newlib) не являются частью G CC, тогда как библиотека C ++ libstdc ++ - v3 размещена с G CC и создается, когда G CC настроен на --enable-languages=c++
. Расположение C -библиотек и C -заголовков должно быть определено с помощью configure.
Для некоторых C -библиотек, таких как Newlib, G CC поддерживает сборки внутри дерева, чтобы эти целевые библиотеки будут содержаться в установке, и пути будут установлены соответствующим образом. Однако создание glib c гораздо сложнее.