роковая ошибка: и sqlite3.ч: нет такого файла или каталога
Я пытаюсь построить приложение C через кросс-компиляцию для платы Zynq (архитектура ARM). Когда я печатаю make, не упоминая ARM arch, он отлично работает на моем ноутбуке. Но как только я изменяю Makefile, я получаю сообщение об ошибке:
main.c:20:43: fatal error: sqlite3.h: No such file or directory
#include "sqlite3.h" //library for sqlite3
^
compilation terminated.
make: *** [ws_temp_server] Error 1
Makefile выглядит так:
SOURCE=lib/base64_enc.c lib/websocket.c lib/sha1.c lib/sqlite/sqlite3.c main.c
CC = arm-xilinx-linux-gnueabi-gcc
LDFLAGS=-lpthread -ldl
INCLUDES=lib/
PROGRAM=ws_temp_server
all: $(PROGRAM)
$(PROGRAM): $(SOURCE)
$(CC) $(SOURCE) -I$(INCLUDES) -o$(PROGRAM) $(LDFLAGS)
clean:
rm $(PROGRAM)
что я делаю не так? Спасибо за любую помощь.
2 ответов
вы не предоставляете достаточно информации, чтобы сказать наверняка: в частности, вы не говорите, где sqlite3.h
файл на самом деле находится в вашей файловой системе. Однако, основываясь на том, что вы показываете, я подозреваю, что вам нужно изменить INCLUDES
переменной, для этого:
INCLUDES = lib/sqlite
(или поменять #include
в коде #include "sqlite/sqlite3.h"
). Это предполагает, что файл заголовка находится в том же каталоге, что и sqlite3.c
исходный файл.
обратите внимание, что это плохая/запутанная реализация. Вы должны положить -I
флаг в INCLUDES
переменной:
INCLUDES = -Ilib/sqlite
...
$(PROGRAM): $(SOURCE)
$(CC) $(SOURCE) $(INCLUDES) -o$(PROGRAM) $(LDFLAGS)
INCLUDES
множественное число, которое может заставить кого-то поверить, что они могут добавить несколько каталогов в эту переменную, но если вы оставите ее так, как у вас есть, это вызовет странные ошибки компилятора:
INCLUDES = lib/sqlite another/dir
...
$(PROGRAM): $(SOURCE)
$(CC) $(SOURCE) -I$(INCLUDES) -o$(PROGRAM) $(LDFLAGS)
добавить флаги -Ilib/sqlite another/dir
... обратите внимание, что во втором каталоге нет .
конечно, по соглашению вы должны использовать CPPFLAGS
(для C флаги препроцессора), не INCLUDES
, но... :)