首页 > 解决方案 > 使用 sqlite3 设置 C++ 代码示例不起作用

问题描述

我尝试在基本的 c++ 应用程序中设置 sqlite3 扩展。我知道这个网站上仍有线程,但我已经尝试了所有关于这个问题的建议。我无法继续前进,没有什么是正确的解决方案。我想编译 SQLConnector.cpp 类(参见下面的文件夹结构)。

我无法在没有错误的情况下编译应用程序。

我已经尝试过的:

我已经在以下位置安装了 sqlite3:

  C:\sqlite3\

我已经下载了 sqlite-amalgamation 并创建了一个具有以下结构的文件夹:

     sqlite_test
     ├── SQLConnector.cpp
     ├── shell.c
     ├── sqlite3.c
     ├── sqlite3.h
     └── sqlite3ext.h    

我使用此命令编译代码,但它不起作用:

    g++ SQLConnector.cpp - l sqlite3

这是基本代码片段的源代码:

   #include "sqlite3.h"
   #include "sqlite3ext.h" // I have tried it also without this file.
   #include <iostream>

 int main()
 {
     sqlite3 *db;
     char *strErrorMsg = 0;
     int rc;

     rc = sqlite3_open("test.db", &db);
     if (rc)
     {
         std::cout << "Can't open database " << sqlite3_errmsg(db) << 
         std::endl;
         return 1;
     }

     std::cout << "Opened database successfully!" << std::endl;

     sqlite3_close(db);

     return 0;
 }

这是错误,我得到:

 SQLConnector.cpp: In Funktion »int main()«:
 sqlite3ext.h:426:40: Fehler: »sqlite3_api« wurde in diesem 
 Gültigkeitsbereich nicht definiert
  #define sqlite3_open                   sqlite3_api->open
                                    ^
 SQLConnector.cpp:20:10: Anmerkung: bei Substitution des Makros 
 »sqlite3_open«
      rc = sqlite3_open("test.db", &db);
      ^~~~~~~~~~~~
 sqlite3ext.h:426:40: Anmerkung: empfohlene Alternative: »sqlite3_log«
  #define sqlite3_open                   sqlite3_api->open
                                    ^
 SQLConnector.cpp:20:10: Anmerkung: bei Substitution des Makros 
 »sqlite3_open«
      rc = sqlite3_open("test.db", &db);

我不知道应该将哪个路径插入 -l 选项。如果我删除 -l 选项并编译 sqlite3.c,那么我会收到超过 300 个错误:-D

我能做些什么?我不明白如何设置扩展可能?有人可以帮我看看他的设置吗?

我使用 VSCode,但我在 shell 上手动编译。

标签: c++sqlitec++11

解决方案


将宏“SQLITE_EXTENSION_INIT1”单独放在一行之后#include <sqlite3ext.h>
<sqlite3.h>包含在<sqlite3ext.h>.


推荐阅读