如何将SQLite嵌入到C++项目中

3

我正在尝试将SQLite嵌入到我的项目中。我已经把以下文件放入名为lite的目录中:sqlite3.dll,sqlite3.h和sqlite3.lib。

这是我的项目:

#include <stdio.h>
#include <lite/sqlite3.h>

int main(int argc, char* argv[])
{
   sqlite3 *db;
   char *zErrMsg = 0;
   int rc;

   rc = sqlite3_open("test.db", &db);

   if( rc ){
      fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
      return(0);
   }else{
      fprintf(stderr, "Opened database successfully\n");
   }
   sqlite3_close(db);
}

当我运行项目时,出现以下错误:
:-1: error: cannot find -lsqlite3d
collect2.exe:-1: error: error: ld returned 1 exit status

我可能做错了什么?

我正在使用Qt。这是我的.pro文件:

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += main.cpp

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/lite/ -lsqlite3
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lite/ -lsqlite3d
else:unix: LIBS += -L$$PWD/lite/ -lsqlite3

INCLUDEPATH += $$PWD/lite
DEPENDPATH += $$PWD/lite
2个回答

5

既然您已经在使用Qt,为什么不使用Qt SQL模块呢?这样可以避免很多麻烦,只需添加就可以避免这种链接问题。

QT += sql

给你的Qt项目文件添加内容。
#include <QtSql>

给您源代码。您将拥有许多模型视图类,这些类可方便地将数据库集成到应用程序UI中。

这是在Qt应用程序中使用SQL的推荐方式,除非您有非常特定的需求。您可以使Qt在底层使用不同的SQL引擎(如SQLite、MySQL等),但Qt会为您抽象出所有这些内容。


有没有可能以任何方式在GUI中查看Qt SQL数据库,也许通过浏览器? - Program-Me-Rev
1
是的,请看一下QSqlTableModel,SQL模块与Qt模型视图框架兼容。 - Emerald Weapon

1
尽管有些晚了,但我认为这个问题中还有一些问题被完全忽略了,即使解决方法是实用的。
错误非常明显。链接器找不到 "debug" 版本的 lib lsqlite3d,而该文件在 qmake 的 .pro 文件中已经配置好了。要么获取该库的 "debug" 文件,要么从 .pro 中删除此行。 else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lite/ -lsqlite3d 在 Qt 中添加库时,这似乎是一个常见的错误。有一个选项: 为调试版本添加 "d" 后缀 当没有库的调试版本时,必须取消选择该选项。
其次,也是这个答案的精髓,由于 SQLite 是用 C 编写的,因此 include 部分不正确,无法工作。必须进行更正: extern "C" { #include <lite/sqlite3.h> }

这两个问题纠正后,添加SQLite库或者一般的任何C库到Qt中都不应该有问题。

对于像SQLite这样的小代码,另一个选择是将其与项目静态编译。只需将sqqlite3.hsqlite3.c添加到Qt项目中,并从.pro中删除对sqlite3.lib的链接,同时更新include部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接