我正在尝试在我的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/

10-10 18:19