роковая ошибка: и 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, но... :)


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

$ sudo apt-get install libsqlite3-dev

(debian wheezy)

НТН кого-то