如何在 c++ 项目中使用 sqlite3.c
How can I use sqlite3.c in a c++ project?
我正在尝试在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;
}
但是,sqlite3.c 文件显示在 Eclipse 中,并显示许多错误。例如,以下部分使用"无法解析字段'IN_DECLARE_VTAB'进行批注。
#ifdef SQLITE_OMIT_VIRTUALTABLE
#define IN_DECLARE_VTAB 0
#else
#define IN_DECLARE_VTAB (pParse->declareVtab)
#endif
当我尝试编译时,我收到一系列错误,例如:
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]')
我确实在这里发现了一个类似的问题,但似乎也没有在那里得到解决。
我怀疑这是 Eclipse 的设置问题,所以如果有人能给我任何建议或有用的教程说明,我将不胜感激。如果我最好将其发布到专门的sqlite论坛上,请告诉我。
SQLite是用C语言编写的,C和C++之间有很多区别。不是很大的数字,但它们绝对不一样,也不是另一个的超集。因为您使用的是单个 Eclipse 项目,所以您可能最终尝试使用C++编译器编译 C 代码,因此在这些小差异上解脱了困境。
建议你将sqlite3.c构建到一个单独的库中(它可以是一个静态库,也可以是一个动态库;你的调用)作为一个C项目,然后让你的C++项目只使用该C项目作为依赖项。或者您可以构建它一次,然后将其作为外部依赖项;那也行。(公平地说,这是一个外部依赖;无论如何,你不应该真的把它完全嵌入到你的代码中,因为这会使跟踪错误修复变得更加困难。保持它分开 - 至少对于构建,即使不是分发 - 会让你的生活更轻松。
你用这种方式尝试过吗?(带双指针):
int main() {
sqlite3* db;
const char* dbname = "test.db";
sqlite3_open(dbname, &db);
return 0;
}
我想你正在研究Linux。
另一种方法是执行脚本:
int main() {
system("connectDB.sh");
/* connectDB.sh should be chmod +x */
}
您的文件连接数据库将是:
#!/bin/bash
sqlite3 test.db "select * from test.table"
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法在 CLion 中构建 C++ 项目
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 欧拉项目#8答案是大以获得有效答案
- 从链接列表c++中删除一个项目
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 既然存在危险,为什么项目要使用-I include开关
- cmake在我的项目中所需的所有静态库都不成功
- QT通过C++添加映射QML项目
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在linux上调试巨大的C++项目
- 在其他文件中创建类时在 c++ 项目中不起作用
- 部署基于 qt 的项目后,我的 sqlite3 文件不会被复制 (android)
- 将 Sqlite3 添加到项目错误 C1853 预编译头文件来自以前的版本
- 在我的项目中添加sqlite3库时出现错误消息
- 如何在 c++ 项目中使用 sqlite3.c
- <!> 启动时出错:使用 sqlite3 时无法在 OMNET++ 项目中加载库
- 在sqlite3数据库中搜索查询某些项目