You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++项目使用SQLite3报错求助:sqlite3_api未定义

解决SQLite3编译错误:sqlite3_api未声明的问题

问题原因

错误根源是不必要地包含了sqlite3ext.h,这个头文件是为编写SQLite扩展(比如自定义SQL函数)设计的,普通应用调用SQLite核心API完全不需要它。包含该头文件后,它会将sqlite3_open这类标准API宏替换为依赖sqlite3_api的调用,而sqlite3_api仅在扩展环境中初始化,普通程序里不存在,因此触发编译错误。

另外代码里还有个小问题:C++的cout不支持printf风格的%d格式符,需要调整输出写法。

步骤1:修正测试代码

移除#include <sqlite3ext.h>,并修正输出语句:

#include <iostream>
#include <sqlite3.h>

using std::cout;
using std::endl;

int main() {
    sqlite3 *db;
    int result = sqlite3_open("test.db", &db);
    cout << "results = " << result << endl;
    sqlite3_close(db);
    return 0;
}

步骤2:修正编译命令

原编译命令只编译了main.cpp,但没包含SQLite的实现文件sqlite3.c,同时Linux下SQLite需要依赖pthread和dl库。正确的编译命令如下:

g++ main.cpp sqlite3.c -Isqlite -o main -lpthread -ldl

命令说明

  • -Isqlite:指定头文件搜索目录,确保编译器能找到sqlite3.h
  • sqlite3.c:将SQLite的核心实现代码一起编译到可执行文件中
  • -lpthread:链接POSIX线程库,SQLite依赖它实现线程安全
  • -ldl:链接动态加载库,SQLite用它处理部分扩展功能

执行修正后的编译命令,就能生成可执行文件main,运行后可正常创建并操作SQLite数据库。

内容的提问来源于stack exchange,提问作者Dima_MSI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:15:06