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

时间:2016-11-13 08:28:00

标签: c++ qt

我正在尝试将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 个答案:

答案 0 :(得分:3)

由于您已经在使用Qt,为什么不使用Qt SQL module?你将节省很多痛苦,你只需添加

就可以绕过这种联系问题
QT += sql

给你Qt项目文件,然后添加

#include <QtSql>

你的文件。您将拥有许多模型视图类,这些类有助于将数据库集成到您的应用程序UI中。

这是在Qt应用程序中使用SQL的推荐方法,除非您有非常特殊的需求。你可以让Qt使用不同的SQL引擎(SQLite,MySQL,...),但是Qt会为你抽象所有这些。

答案 1 :(得分:1)

尽管为时已晚,但我认为这里存在一些问题,即使变通办法是切实可行的,..

  • 该错误非常清楚。.链接器找不到qmake lsqlite3d文件中配置的lib .pro的“调试”版本。获取lib的“调试”文件,或从.pro
  • 中删除此行

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

在Qt中添加库时,这似乎是一个常见错误。.有一个选项:

Add "d" suffix for debug version

并且没有lib的调试版本时,必须取消选择此选项。

  • 第二和这个答案的实质,因为SQLite是用C编写的,所以include 该部分不正确,将无法正常工作;必须将其更正为:

    extern "C" {

    #include <lite/sqlite3.h>

    }

在纠正了这两个问题之后..向Qt添加SQLite库或通常任何C库应该没有问题。

实际上使用SQLite之类的小代码,另一种选择是通过仅将sqqlite3.hsqlite3.c添加到Qt项目并删除与sqlite3.lib的链接来将其与项目静态编译。 .pro中的内容,其中包含部分已更新。