web-dev-qa-db-ja.com

致命的なエラー:sqlite3.h:そのようなファイルまたはディレクトリはありません

Zynqボードのクロスコンパイル(ARMアーキテクチャ)を介してCアプリケーションを構築しようとしています。 ARM Archについて言及せずにmakeと入力すると、ラップトップで正常に動作します。ただし、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)

私は何を間違えていますか?助けてくれてありがとう。

22
user2263752

確かに言うのに十分な情報を提供していません。特に、sqlite3.hファイルが実際にファイルシステムのどこにあるかを言っていません。ただし、表示内容に基づいて、INCLUDES変数を次のように変更する必要があると思われます。

INCLUDES = lib/sqlite

(または、コードの#include#include "sqlite/sqlite3.h"に変更します)。これは、ヘッダーファイルがsqlite3.cソースファイルと同じディレクトリにあることを前提としています。

これは悪い/混乱した実装であることに注意してください。 INCLUDES変数に-Iフラグを設定する必要があります。

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を追加します... 2番目のディレクトリに-Iオプションがないことに注意してください。

もちろん、慣例により、CPPFLAGSではなくINCLUDES(Cプリプロセッサフ​​ラグ用)を使用する必要がありますが、... :)

2
MadScientist

私はこの問題を修正しました

$ Sudo apt-get install libsqlite3-dev

(debian wheezy)

HTH誰か

94
user9869932