【发布时间】:2018-10-06 03:31:54
【问题描述】:
我正在创建一个包含一些对象的静态库,其中包括依赖于 sqlite3 的对象。这是我的制作文件;它基本上将 3 个 cpp 文件编译成对象,将它们放入 .a lib 中,然后使用这个库来获取我的主要二进制文件
CPPSRCS := \
$(LIBDIR)/database/active_database.$(SRCEXT) \
$(LIBDIR)/sd_card/sd_card.$(SRCEXT) \
$(LIBDIR)/led/led.$(SRCEXT)
OBJS := $(CPPSRCS:.cpp=.o)
lib/%.o: %.$(SRCEXT)
$(CXX) $(CXXFLAGS) -c $^ -o $@ -lsqlite3
lib_$(APP).a: $(OBJS)
$(AR) rcs lib_$(APP).a $(OBJS)
$(APP): lib_$(APP).a
$(CXX) $(CXXFLAGS) $(SRCDIR)/$@.$(SRCEXT) -o $(DESTDIR)/$@ lib_$(APP).a
我的静态库已构建,但在尝试获取我的二进制文件时,我得到未定义的引用:
lib_XX.a(active_database.o): In function `database::ActiveDatabase::sqlite_exec_wrapper(std::string, int (*)(void*, int, char**, char**), void*)':
database/active_database.cpp:174: undefined reference to `sqlite3_exec'
database/active_database.cpp:178: undefined reference to `sqlite3_free'
lib_XX.a(active_database.o): In function `database::ActiveDatabase::init_db()':
我可以看到 -lsqlite3(在 /usr/lib 中)未包含在编译中,但我似乎无法在构建静态库时强制包含它。
【问题讨论】:
-
链接APP时需要包含
-lsqlite3。
标签: sqlite g++ linker-errors