【问题标题】:Setup C++ code example with sqlite3 not working使用 sqlite3 设置 C++ 代码示例不起作用
【发布时间】:2019-11-18 06:08:06
【问题描述】:

我尝试在一个基本的 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

这是基础代码sn-p的源代码:

   #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 上手动编译。

【问题讨论】:

  • 你需要编译sqlite3.c,然后将它们链接在一起。也许gcc -c sqlite3.c 然后g++ SQLConnector.cpp sqlite3.o
  • 如果是 Windows,sqlite 已经是 SDK 的一部分。
  • 非常感谢。这是正确的 g++ 命令。非常感谢。
  • @MichaelChourdakis 使用操作系统提供的 sqlite 库的问题在于它通常已经过时并且没有启用很多有用的非默认功能。在可行的情况下,最好采用 OP 的方法并将 sqlite 源代码包含在您的项目中。

标签: c++ sqlite c++11


【解决方案1】:

将宏“SQLITE_EXTENSION_INIT1”单独放在#include &lt;sqlite3ext.h&gt; 行之后的一行。
&lt;sqlite3.h&gt; 也包含在 &lt;sqlite3ext.h&gt; 中。

【讨论】:

    猜你喜欢
    • 2019-06-29
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    相关资源
    最近更新 更多