【发布时间】:2014-12-13 03:16:04
【问题描述】:
我正在尝试将 SQLite Amalgamation 添加到我的项目中。根据their page,我“只需将合并复制到您的源目录中,然后将其与项目中的其他 C 代码文件一起编译。”我还复制了 sqlite3.h,所以我可以访问 API。
但是,对 API 的任何函数调用,例如:
sqlite3 *db;
int rc;
rc = sqlite3_open("test.db", &db);
导致以下错误:
无效参数 '
候选人是:
int sqlite3_open(const char *, * *) '数据设置.cpp
/FCS/src
第 24 行
语义错误
我在这里做错了什么?我忽略了哪些设置?
【问题讨论】:
-
请显示 complete 和 unedited 错误输出。
-
您已标记问题 C++。这是一种与 C 不同的语言,其中实现了 sqlite。我不确定合并是否会由 C++ 编译器正确构建,但看起来您可能在名称修饰方面有所不同(这意味着“否”)。您可以通过在合并源文件中适当放置一个或多个
extern "C" { }块来解决问题,也可能在标题中。 -
@JoachimPileborg 错误是从 Eclipse 中复制和粘贴出来的。唯一的编辑是删除文件名、路径和行号。但我会编辑以包含这些内容。
-
@JohnBollinger 这已包含在合并中。在头文件中是:
#ifdef __cplusplus extern "C" { #endif -
头文件和编译的实现必须匹配,并且标志表明你不是这种情况。合并的 C 源文件必须将所有具有外部链接的函数声明为特别具有
extern "C"链接,否则您必须使用 C 编译器进行编译(也许您可以将选项传递给编译器以使其执行此操作)。如果您将 C 源文件编译为 C++ 源文件,则仅包含 sqlite 标头是不够的。
标签: c++ eclipse sqlite invalid-argument