Фатальная ошибка: sqlite3.h: нет такого файла или каталога

Я пытаюсь создать приложение C с помощью кросс-компиляции для платы Zynq (архитектура ARM). Когда я печатаю make без упоминания арки ARM, она отлично работает на моем ноутбуке. Но как только я изменяю 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)

Что я делаю неправильно? Спасибо за любую помощь, которую я могу получить.

Ответ 1

Вы не предоставляете достаточно информации, чтобы сказать наверняка: в частности, вы не говорите, где файл 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... обратите внимание, как второй каталог не имеет опции -I.

Конечно, по соглашению вы должны использовать CPPFLAGS (для флагов препроцессора C), а не INCLUDES, но...:)

Ответ 2

У меня эта проблема исправлена ​​с помощью

$ sudo apt-get install libsqlite3-dev

(debian wheezy)

HTH Кто-то