2015-03-10 37 views
10

Sto provando a creare un'applicazione C tramite la compilazione incrociata per una scheda Zynq (architettura ARM). Quando digito make senza menzionare l'arch di ARM, funziona bene sul mio portatile. Ma non appena modifico il Makefile, ottengo un errore che dice:errore fatale: sqlite3.h: nessun file o directory

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 

Il Makefile si presenta così:

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) 

Che cosa sto facendo di sbagliato? Grazie per l'aiuto che posso ottenere.

risposta

2

Non si forniscono informazioni sufficienti per dire con certezza: in particolare, non si dice dove il file sqlite3.h si trova effettivamente nel proprio file system. Tuttavia, sulla base di ciò che si fa spettacolo ho il sospetto che è necessario modificare la variabile INCLUDES, a questo:

INCLUDES = lib/sqlite 

(oppure modificare la #include nel codice per essere #include "sqlite/sqlite3.h"). Ciò presuppone che il file di intestazione si trovi nella stessa directory del file sorgente sqlite3.c.

Si noti che si tratta di un'implementazione errata/confusa. Si dovrebbe essere messa la bandiera -I nella variabile INCLUDES:

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

INCLUDES è plurale che può portare qualcuno a credere che potrebbe aggiungere più directory in quella variabile, ma se si lascia il modo in cui lo avete, questo sarà causare errori di compilazione strani:

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

aggiungerà le bandiere -Ilib/sqlite another/dir ... notare come la seconda directory non ha un'opzione di -I.

Naturalmente, per convenzione si dovrebbe utilizzare CPPFLAGS (per le bandiere del preprocessore C), non INCLUDES, ma ... :)

+0

Grazie! Ho appena usato #include "sqlite/sqlite3.h" e ora funziona! :) – user2263752

+4

Ciao grazie per aver condiviso. Nel mio caso, ho risolto il problema eseguendo "apt-get install libsqlite3-dev''. (debian wheezy). HTH Qualcuno – r3x

+1

@ julianromera, il tuo suggerimento ha funzionato anche per me. Penso che la tua risposta sia quella giusta. Dovresti scriverlo come risposta. –

47

ho ottenuto questo Risolto il problema con

$ sudo apt-get install libsqlite3-dev 

(debian wheezy)

HTH Qualcuno

Problemi correlati