web-dev-qa-db-fra.com

erreur fatale: sqlite3.h: aucun fichier ou répertoire de ce type

J'essaie de construire une application C via la compilation croisée pour une carte Zynq (architecture ARM). Lorsque je tape make sans mentionner l'arc ARM, cela fonctionne très bien sur mon ordinateur portable. Mais dès que je modifie le Makefile, j'obtiens une erreur disant:

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

Le Makefile ressemble à ceci:

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)

Qu'est-ce que je fais mal? Merci pour toute aide que je peux obtenir.

22
user2263752

Vous ne fournissez pas suffisamment d'informations pour dire avec certitude: en particulier, vous ne dites pas où le sqlite3.h le fichier se trouve réellement sur votre système de fichiers. Cependant, d'après ce que vous montrez, je soupçonne que vous devez modifier la variable INCLUDES, en ceci:

INCLUDES = lib/sqlite

(ou bien changez le #include dans votre code pour être #include "sqlite/sqlite3.h"). Cela suppose que le fichier d'en-tête se trouve dans le même répertoire que le sqlite3.c fichier source.

Notez qu'il s'agit d'une implémentation incorrecte/déroutante. Vous devriez mettre le -I flag dans la variable INCLUDES:

INCLUDES = -Ilib/sqlite
    ...
$(PROGRAM): $(SOURCE)
        $(CC) $(SOURCE) $(INCLUDES) -o$(PROGRAM) $(LDFLAGS)

INCLUDES est au pluriel ce qui peut amener quelqu'un à croire qu'il pourrait ajouter plusieurs répertoires dans cette variable, mais si vous la laissez telle que vous l'avez, cela provoquera d'étranges erreurs de compilation:

INCLUDES = lib/sqlite another/dir
    ...
$(PROGRAM): $(SOURCE)
        $(CC) $(SOURCE) -I$(INCLUDES) -o$(PROGRAM) $(LDFLAGS)

ajoutera les drapeaux -Ilib/sqlite another/dir... notez que le deuxième répertoire n'a pas de -I option.

Bien sûr, par convention, vous devez utiliser CPPFLAGS (pour les drapeaux du préprocesseur C), pas INCLUDES, mais ... :)

2
MadScientist

J'ai résolu ce problème avec

$ Sudo apt-get install libsqlite3-dev

(Debian Wheezy)

HTH quelqu'un

94
user9869932