我正在尝试在我的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”
最佳答案
(请参见下面的编辑)
不确定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
并重新编译项目。关于c++ - 在Ubuntu上的Netbeans C++中,Sqlite未定义对“sqlite3_open”错误的引用,将SQLite集成到Netbeans C++ Ubuntu中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3463438/