#c #gcc #compiler-errors #bluez
#c #gcc #ошибки компилятора #bluez
Вопрос:
У меня возникли проблемы с компиляцией некоторого кода на C.
У меня есть структура кода, подобная следующей
- main.c
- Src
- строка
- line.h
- строка.c
- строка
Доступно здесь: https://github.com/Vafilor/c_includes
main.c
включает #include "src/line/line.h"
src/line/line.c
включает #include "src/line/line.h"
Когда я пытаюсь скомпилировать это с gcc main.c src/line/line.c
помощью ubuntu 20.4
Я получаю эту ошибку
src/line/line.c:1:10: fatal error: src/line/line.h: No such file or directory
1 | #include "src/line/line.h"
| ^~~~~~~~~~~~~~~~~
compilation terminated.
Как я могу заставить это скомпилировать?
Дополнительная информация:
Я просматривал код bluez в https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree / и у них есть что-то похожее с
client/main.c
— включает shell.hsrc/shared/shell.c
— включает shell.hsrc/shared/shell.h
итак, я пытаюсь выяснить, как это работает для их базы кода.
Комментарии:
1. Обычный способ сделать это — передать каталог include в gcc, а затем иметь все
#include
инструкции относительно этого.gcc -I src ....
а затем в исходном коде есть#include "line/line.h"
.2. @kaylum Это сделало это! Я запустил
gcc -I ./ main.c src/line/line.c
, и он скомпилировался. То, что вы сказали, имеет смысл включать src вместо текущего каталога, и я думаю, что это правильный путь. Спасибо!3. OT: относительно: когда я пытаюсь скомпилировать это с помощью gcc main.c src/line/line.c в ubuntu 20.4 , это НЕ инструкция компиляции. Скорее это компиляция двух файлов, а затем ссылка. Кроме того, это не включает никаких предупреждений, кроме значений по умолчанию. предлагаю использовать:
gcc -c -Wall -Wextra -Wconversion -pedantic -std=gnu11 <name of file to compile.c > -o <name of file to compile.o
Затем, после получения чистой компиляции для каждого исходного файла:gcc main.o line.o -o myexec