我正在尝试在我的Netbeans C ++中使用Sqlite并遵循此处的教程 http://www.dreamincode.net/forums/topic/122300-sqlite-in-c/
当我构建它时,它给了我对`sqlite3_open'和其他sqlite3函数的未定义引用。我也包括了sqlite3.h。我在这里失踪了什么?
当我将链接器添加到项目属性中的静态库libsqlite3.a时,我的未定义引用错误消失但现在它给了我
/usr/lib/libsqlite3.a(sqlite3.o):在函数pthreadMutexTry':
/usr/lib/libsqlite3.a(sqlite3.o): In function
pthreadMutexAlloc'中:
/usr/lib/libsqlite3.a(sqlite3.o):在函数pthreadMutexAlloc':
/usr/lib/libsqlite3.a(sqlite3.o): In function
pthreadMutexAlloc'中:
/usr/lib/libsqlite3.a(sqlite3.o):在函数unixDlError':
/usr/lib/libsqlite3.a(sqlite3.o): In function
findLockInfo'中:
/usr/lib/libsqlite3.a(sqlite3.o):在函数findLockInfo':
/usr/lib/libsqlite3.a(sqlite3.o): In function
unixDlSym'中:
/usr/lib/libsqlite3.a(sqlite3.o):在函数unixDlClose':
/usr/lib/libsqlite3.a(sqlite3.o): In function
unixDlOpen'中:
collect2:ld返回1退出状态
make [2]: * [dist / Debug / GNU-Linux-x86 / cddb]错误1
make [1]:* [.build-conf]错误2
make:*** [.build-impl]错误2
如果我包含sqlite3ext.h,我会得到 main.cpp:20:错误:在此范围内未声明'sqlite3_api'
答案 0 :(得分:2)
不确定C ++在NetBeans中是如何工作的,但是添加libsqlite3.a
看起来非常好。现在,如果您有一个Makefile,您可以编辑它并定义(或编辑)LDFLAGS
变量,并将其作为选项传递给链接器...
SQLite的默认配置需要链接 libdl 和 libpthread ,这就是为什么您可能需要将-ldl -lpthread
添加到链接选项中。
例如(如果在NetBeans中可以这样做)将其添加到Makefile中:
LDFLAGS= -ldl -lpthread
在我的项目中,我这样使用它:
target: $(OBJ)
gcc $(LDFLAGS) $(OBJ) -o $@
实际上,也可以在GUI中添加链接器选项,而无需手动编辑Makefile:
在子菜单配置属性中 - >链接器 - >命令行,只需在“其他选项”中添加-ldl -lpthread
并重新编译项目。
答案 1 :(得分:1)
在Linux上将Sqlite集成到Netbeans中
1)Synaptic Package Manager - 安装libsqlite3-dev
2)Netbeans-> Your_Project Properties-> Linker-> Libraries-> Add Library-> libsqlite3.a
3)#include sqlite3.h
有用!