VSCode下C++结合SQLite3开发数据库课程作业链接错误如何解决
问题原因
你遇到的是GCC链接阶段报错,编译工具可以找到sqlite3的函数声明,但是找不到对应的函数实现,本质是编译命令中没有添加sqlite3的库链接参数。
修复步骤
1. 前置文件准备
确认你的sqlite3文件夹D:\SSD\Desctop\barethika\下存在以下文件:
- 已有
sqlite3.h(你当前已经满足) - 新增
libsqlite3.a(MinGW环境使用的静态库文件,如果你下载的sqlite预编译包是32位就找对应32位的.a文件,64位就找64位的,避免架构不匹配)
2. 代码修改
把头文件引入的绝对路径改成相对引用,方便后续项目迁移:
#include <stdio.h> #include "sqlite3.h" int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Opened database successfully\n"); } sqlite3_close(db); }
3. VSCode编译配置修改
如果你用Code Runner插件运行代码
- 打开VSCode设置,搜索
Code-runner: Executor Map,点击「在settings.json中编辑」 - 找到cpp对应的配置行,修改为:
"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt -I\"D:\\SSD\\Desctop\\barethika\" -L\"D:\\SSD\\Desctop\\barethika\" -lsqlite3 && $dir$fileNameWithoutExt",
参数说明:
-I后面跟头文件所在目录,告诉编译器去哪里找sqlite3.h-L后面跟库文件所在目录,告诉链接器去哪里找libsqlite3.a-lsqlite3是告诉链接器要链接libsqlite3.a库
如果你用tasks.json配置编译任务
打开.vscode/tasks.json,在args数组的末尾添加三个参数:
"-ID:\\SSD\\Desctop\\barethika", "-LD:\\SSD\\Desctop\\barethika", "-lsqlite3"
4. 运行验证
修改完配置后重新运行代码,正常会输出Opened database successfully,同时代码目录下会生成test.db数据库文件。
内容的提问来源于stack exchange,提问作者Albert
相关产品推荐
相关产品推荐

