如何在 C++ 项目中使用 sqlite3.c?

mm_*_*857 5 c c++ sqlite eclipse-cdt

我正在尝试在 Eclipse 的 C++ 项目中使用 sqlite3,并在网上找到了大量有关使用 API 的建议,但不幸的是我遇到了较早的障碍。我想这是因为我缺乏 C/C++ 和 CDT 的经验。我只是将 sqlite3.c 和 sqlite3.h 复制到项目的源文件夹中,并有一个测试方法如下:

int main() {
    sqlite3* db;
    sqlite3** dbpointer = &db;
    const char* dbname = "test.db";
    sqlite3_open(dbname, dbpointer);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

然而,sqlite3.c 文件在 Eclipse 中显示时存在许多错误。例如,以下部分注释为“无法解析字段‘IN_DECLARE_VTAB’”。

#ifdef SQLITE_OMIT_VIRTUALTABLE
  #define IN_DECLARE_VTAB 0
#else
  #define IN_DECLARE_VTAB (pParse->declareVtab)
#endif
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时,出现一系列错误,例如:

 gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/sqlite3.d" -MT"src/sqlite3.d" -o "src/sqlite3.o" "../src/sqlite3.c"
../src/sqlite3.c:30997: error: initializer element is not constant
../src/sqlite3.c:30997: error: (near initialization for `aSyscall[0].pCurrent')
../src/sqlite3.c:30997: error: initializer element is not constant
../src/sqlite3.c:30997: error: (near initialization for `aSyscall[0]')
../src/sqlite3.c:31009: error: initializer element is not constant
../src/sqlite3.c:31009: error: (near initialization for `aSyscall[1]')
../src/sqlite3.c:31017: error: initializer element is not constant
../src/sqlite3.c:31017: error: (near initialization for `aSyscall[2]')
Run Code Online (Sandbox Code Playgroud)

我确实在这里发现了类似的问题,但似乎也没有在那里得到解决。

我怀疑这是 Eclipse 的设置问题,因此如果有人能给我任何有用教程的建议或指导,我将非常感激。如果我最好将其发布到专门的 sqlite 论坛,请告诉我。

Luc*_*nzo 1

你有尝试过这种方式吗?(双指针):

int main() {
    sqlite3* db;
    const char* dbname = "test.db";
    sqlite3_open(dbname, &db);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我猜你正在Linux上工作。
另一种方法是执行脚本:

int main() {
  system("connectDB.sh"); 
  /* connectDB.sh should be chmod +x */
}
Run Code Online (Sandbox Code Playgroud)

您的文件 connectDB 将是:

#!/bin/bash
sqlite3 test.db "select * from test.table" 
Run Code Online (Sandbox Code Playgroud)