致命错误:sqlite3.h文件不存在

40

我试图通过交叉编译为Zynq板构建一个C应用程序(ARM架构)。当我在没有提及ARM架构的情况下输入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)

我做错了什么?感谢您能提供任何帮助。

2个回答

159
我已为此问题找到解决方法。
$ sudo apt-get install libsqlite3-dev

(Debian Wheezy)


3
太棒了!您的建议在两秒内解决了我的问题!非常感谢! - Jman
6
对于我的情况(CentOS Linux 7),解决这个问题的命令稍有不同:sudo yum install libsqlite3x-devel - CODE-REaD
1
谢谢,这个很顺利地解决了问题。 - Daw

4

您并未提供足够的信息来确定:特别是,您没有说明在文件系统上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,但是... :)


谢谢!我刚刚使用了#include "sqlite/sqlite3.h",现在它可以工作了! :) - user2263752
9
感谢分享。对于我的情况,我通过运行“apt-get install libsqlite3-dev”进行了修复(Debian Wheezy)。祝你好运! - user9869932
1
@julianromera,你的建议对我也起作用了。我认为你的答案是正确的。你应该把它写下来作为一个答案。 - Sopalajo de Arrierez
1
由于我的建议解决了原作者的问题,所以这显然是正确的答案。根据问题中的信息可以看出,作者正在使用本地安装的sqlite,因此使用apt-get安装开发工具包并不是他们想要的。其他人通过apt-get安装开发工具包来解决这个问题很好,但那是另一个问题,需要不同的解决方案。 - MadScientist
因为,正如我上面所说的那样,发布问题的人已经安装了libsqlite-3-dev,所以下面的答案虽然会帮助一些其他遇到不同问题的人(他们没有安装该软件包),但对于这里实际提出的问题并没有帮助。 - MadScientist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接