use*_*752 23 sqlite arm makefile compilation zynq
我正在尝试通过交叉编译为Zynq板(ARM架构)构建C应用程序.当我输入make而不提及ARM拱门时,它在我的笔记本电脑上工作正常.但是一旦我修改了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
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?感谢您提供的任何帮助.
use*_*932 101
我解决了这个问题
$ sudo apt-get install libsqlite3-dev
Run Code Online (Sandbox Code Playgroud)
(debian wheezy)
HTH有人
您没有提供足够的信息来确定:特别是,您没有说明文件sqlite3.h实际上位于文件系统上的位置。但是,根据您所显示的内容,我怀疑您需要将INCLUDES变量更改为:
INCLUDES = lib/sqlite
Run Code Online (Sandbox Code Playgroud)
(或者将#include代码中的 更改为#include "sqlite/sqlite3.h")。这是假设头文件与sqlite3.c源文件位于同一目录中。
请注意,这是一个糟糕/令人困惑的实现。您应该将-I标志放入变量中INCLUDES:
INCLUDES = -Ilib/sqlite
...
$(PROGRAM): $(SOURCE)
$(CC) $(SOURCE) $(INCLUDES) -o$(PROGRAM) $(LDFLAGS)
Run Code Online (Sandbox Code Playgroud)
INCLUDES是复数,这可能会导致有人相信他们可以在该变量中添加多个目录,但如果你保留它的方式,这将导致奇怪的编译器错误:
INCLUDES = lib/sqlite another/dir
...
$(PROGRAM): $(SOURCE)
$(CC) $(SOURCE) -I$(INCLUDES) -o$(PROGRAM) $(LDFLAGS)
Run Code Online (Sandbox Code Playgroud)
将添加标志-Ilib/sqlite another/dir...请注意第二个目录没有选项-I。
当然,按照惯例,您应该使用CPPFLAGS(对于 C 预处理器标志),而不是INCLUDES,但是...:)