【问题标题】:How to embed SQLite into a C++ project如何将 SQLite 嵌入到 C++ 项目中
【发布时间】:2020-02-25 17:38:21
【问题描述】:

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

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    既然你已经在使用 Qt 为什么不使用Qt SQL module?你将省去很多痛苦,只需添加即可绕过这种联动问题

    QT += sql
    

    到你的 Qt 项目文件,并添加

    #include <QtSql>
    

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

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

    【讨论】:

    • 是否可以通过任何方式在 GUI 中查看 Qt SQL 数据库,也许是通过浏览器?
    • 是的,看看QSqlTableModel,sql 模块与 Qt 模型视图框架配合得很好。
    【解决方案2】:

    尽管为时已晚,但我认为这里有几个问题在这个问题中完全被忽略了,即使解决方法很实用..

    • 错误很明显.. 链接器找不到在 qmake .pro 文件中如此配置的 lib lsqlite3d 的“调试”版本。要么获取库的“调试”文件,要么从.pro 中删除这一行

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

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

    Add "d" suffix for debug version

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

    • 第二个也是这个答案的本质,因为 SQLite 是用 C 编写的,所以包含 部分不正确,无法正常工作;必须更正为:

      extern "C" {

      #include &lt;lite/sqlite3.h&gt;

      }

    纠正了这两个问题.. 将 SQLite 库或通常的任何 C 库添加到 Qt 应该没有问题。

    实际上对于像 SQLite 这样的小代码,另一种选择是使用项目静态编译它.. 只需将 sqqlite3.hsqlite3.c 添加到 Qt 项目并删除与 sqlite3.lib 的链接 .pro ..包含部分已更新。

    【讨论】:

      猜你喜欢
      • 2019-04-20
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 2018-12-23
      • 2016-12-28
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多