sqlite3 和生成文件中的链接出现问题



我有一个项目,其中我使用 sqlite3 库来创建数据库。这些文件如下:

| sqlite3  
| shell.c  
| sqlite3.c  
| sqlite3.h  
| sqlite3ext.h  
| database.hpp  
| database.cpp  
| main.cpp  
| makefile  

在数据库.hpp 文件中,我做#include "sqlite3/sqlite3.h".
这是我为这个项目编写的 make 文件:

FLAGS = -g 
LIBS = -lsqlite3
CC = g++ 
executable = a.out
all: $(executable)
$(executable): database.o main.cpp
$(CC) $(FLAGS) $(LIBS) database.o main.cpp -o $(executable)
database.o: database.cpp
$(CC) $(FLAGS) $(LIBS) -c database.cpp -o database.o
.PHONY : clean
clean: 
rm $(executable) *.o

问题是这个 makefile 在我的 linux manjaro 计算机中运行得很好,但是当我在使用 ubuntu 的另一台计算机上运行它时,make 会向我发送错误,例如undefined refrence或者有时在另一个带有 ubuntu 的机器中,它会向我发送can't find -lsqlite3
我在这里做错了什么?
提前感谢您的回答

您使用的是系统 SQLite 库,而不是您提供的库。 最简单的解决方案是为sqlite3.o定义一个新规则,并在可执行文件中依赖它:

CFLAGS = -g
CXXFLAGS += $(CFLAGS)
LDFLAGS = -g
# SQLite needs these libraries.
LIBS = -lpthread -ldl
# see https://sqlite.org/howtocompile.html. I added one option to show how it's done
SQLITE3_OPTIONS = -DSQLITE_ENABLE_JSON1
executable = a.out
all: $(executable)
$(executable): database.o sqlite3.o main.o
$(CXX) $(LDFLAGS) $(LIBS) $^ -o $@
# No rule is necessary for main.o or database.o, these are covered by
# Make's built-in rules
sqlite3.o: sqlite3/sqlite3.c sqlite3/sqlite3.h
$(CC) $(CFLAGS) -Isqlite3 $(SQLITE3_OPTIONS) -c -o $@ $<
.PHONY : clean
clean: 
rm $(executable) *.o

最新更新