如何构建包含sqlite_scanner静态扩展的DuckDB合并包?
构建带SQLite Scanner静态扩展的DuckDB合并包解决办法
1. 先把扩展目录摆对
- 克隆DuckDB主仓库:
git clone https://github.com/duckdb/duckdb.git - 进到主仓库的extensions目录:
cd duckdb/extensions - 克隆sqlite_scanner扩展,必须把仓库重命名为sqlite_scanner:
git clone https://github.com/duckdb/duckdb-sqlite-scanner.git sqlite_scanner
(DuckDB的构建系统是按目录名识别扩展的,名字错了就找不到)
2. 清理可能的缓存问题(可选但能避坑)
- 进到sqlite_scanner目录:
cd sqlite_scanner - 执行
make clean清掉旧缓存,然后回到DuckDB根目录:cd ../..
3. 用合并脚本正确生成带扩展的包
别直接用make命令,得给合并脚本指定要包含的扩展:
python3 scripts/amalgamation.py --extensions "core_functions;parquet;json;sqlite_scanner"
这个命令会自动处理扩展的头文件依赖和初始化逻辑,生成的duckdb.cpp里就能找到sqlite_scanner_init()了。
踩坑排查
- 要是还提示找不到
sqlite_scanner_extension.hpp:- 检查sqlite_scanner的目录名是不是完全正确,别拼错字
- 回到DuckDB根目录执行
make clean,再重新跑合并脚本 - 确保sqlite_scanner是最新版,进到扩展目录拉一下代码:
git pull
- 要是合并包里没初始化函数:
- 必须通过
--extensions参数告诉脚本要加哪些扩展,自己改脚本很容易漏了依赖逻辑,白忙活
- 必须通过
内容的提问来源于stack exchange,提问作者thechao
相关产品推荐
相关产品推荐

