2015-03-10 3 views
10

Я пытаюсь создать приложение C с помощью кросс-компиляции для платы Zynq (архитектура ARM). Когда я печатаю make без упоминания арки ARM, она отлично работает на моем ноутбуке. Но как только я изменить Makefile, я получаю сообщение об ошибке сказав:Неустранимая ошибка: sqlite3.h: Нет такого файла или каталога

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 ... обратите внимание, как второй каталог не имеет -I вариант.

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

+0

Спасибо! Я просто использовал #include "sqlite/sqlite3.h", и теперь он работает! :) – user2263752

+4

Привет, спасибо за обмен. В моем случае я получил исправление: 'apt-get install libsqlite3-dev''. (debian wheezy). HTH Кто-то – r3x

+1

@julianromera, ваше предложение тоже работало на меня. Я думаю, что ваш ответ правильный. Вы должны записать это как ответ. –

47

Я получил этот вопрос с фиксированной

$ sudo apt-get install libsqlite3-dev 

(Debian свистящих)

HTH Кто-то

Смежные вопросы