33

我正在尝试通过交叉编译 Zynq 板(ARM 架构)来构建 C 应用程序。当我在没有提及 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)

我究竟做错了什么?感谢我能得到的任何帮助。

4

2 回答 2

143

我解决了这个问题

$ sudo apt-get install libsqlite3-dev

(debian 喘不过气来)

于 2015-08-01T18:38:54.687 回答
3

您没有提供足够的信息来确定:特别是,您没有说明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,但是... :)

于 2015-03-10T17:28:15.403 回答