我正在尝试将 SQLite Amalgamation 添加到我的项目中。根据their page ,我“只需将合并复制到您的源目录中,然后将其与项目中的其他 C 代码文件一起编译。”我还在 sqlite3.h 中进行了复制,因此我可以访问 API。
但是,对 API 的任何函数调用,例如:
sqlite3 *db;
int rc;
rc = sqlite3_open("test.db", &db);
导致以下错误:
Invalid arguments '
Candidates are:
int sqlite3_open(const char *, * *) 'DataSettings.cpp
/FCS/src
line 24
Semantic Error
我在这里做错了什么?我忽略了什么设置?
最佳答案
该问题具有名称修改不匹配的特点。因为 C++ 允许根据参数类型重载函数,所以 C++ 编译器必须将它们发出的函数名称“破坏”到目标代码中以对参数类型进行编码。 C 编译器不会这样做,也不希望对它们这样做。向 C++ 编译器指定函数具有“C”链接会禁用该函数名称的名称修改和重载;这就是 extern "C"
所做的。
尽管 C 在许多方面与 C++ 的一个子集相似,但两者是截然不同的语言。最好用 C 编译器编译 C 代码。因此,您的替代方案之一是将 sqlite 合并的 C 源代码与您的 C++ 代码分开构建到一个库中,然后将其与您的 C++ 目标文件链接以生成最终的可执行文件。
关于c++ - SQLite 函数调用都有无效参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27446107/