0

我正在尝试将 SQLite Amalgamation 添加到我的项目中。根据他们的页面,我“只需将合并复制到您的源目录中,然后将其与项目中的其他 C 代码文件一起编译。” 我还复制了 sqlite3.h,所以我可以访问 API。

但是,对 API 的任何函数调用,例如:

sqlite3 *db;
int rc;

rc = sqlite3_open("test.db", &db);

导致以下错误:

无效参数 '
候选者是:
int sqlite3_open(const char *, * *) '

DataSettings.cpp
/FCS/src
第 24 行
语义错误

我在这里做错了什么?我忽略了哪些设置?

4

1 回答 1

2

该问题具有名称修饰不匹配的特征。因为 C++ 允许根据参数类型重载函数,所以 C++ 编译器必须将它们发出的函数名“修改”到目标代码中以对参数类型进行编码。C 编译器不这样做,也不期望对它们这样做。向 C++ 编译器指定函数具有“C”链接会禁用该函数名称的名称修改和重载;这就是这样extern "C"做的。

尽管 C 在许多方面与 C++ 的子集相似,但两者是不同的语言。最好用 C 编译器编译 C 代码。因此,您的一种选择是将 sqlite 合并的 C 源代码与您的 C++ 代码分开构建到一个库中,然后将其与您的 C++ 目标文件链接以生成最终的可执行文件。

于 2014-12-12T19:16:04.010 回答