当前位置: 首页 > news >正文

编译运行duckdb rust插件模板extension-template-rs

下载https://github.com/duckdb/extension-template-rs/archive/refs/heads/main.tar.gz 并解压
进入解压的目录执行build命令行。

/par# cd extension-template-rs-main
/par/extension-template-rs-main# cargo build --releaseUpdating `mirror` indexDownloaded duckdb-loadable-macros v0.1.10 (registry `mirror`)Downloaded miniz_oxide v0.8.0 (registry `mirror`)Downloaded flate2 v1.0.34 (registry `mirror`)Downloaded syn v2.0.79 (registry `mirror`)Downloaded duckdb v1.4.0 (registry `mirror`)Downloaded libduckdb-sys v1.4.0 (registry `mirror`)Downloaded 6 crates (8.8MiB) in 4m 38s (largest was `libduckdb-sys` at 5.6MiB)Compiling libm v0.2.8Compiling autocfg v1.4.0Compiling proc-macro2 v1.0.87Compiling unicode-ident v1.0.13Compiling cfg-if v1.0.0Compiling libc v0.2.159Compiling version_check v0.9.5Compiling bitflags v2.6.0Compiling foldhash v0.1.5Compiling bytes v1.7.2Compiling iana-time-zone v0.1.61Compiling zerocopy v0.7.35Compiling once_cell v1.20.2Compiling static_assertions v1.1.0Compiling hashbrown v0.15.2Compiling lexical-util v1.0.3Compiling rustix v0.38.37Compiling arrow-schema v56.1.0Compiling heck v0.5.0= note: collect2: fatal error: cannot find 'ld'compilation terminated.   

链接失败,就把mold所在目录加入搜索路径

/par/extension-template-rs-main# export PATH=$PATH:/par/mold240/bin
/par/extension-template-rs-main# cargo build --releaseCompiling libm v0.2.8Compiling num-traits v0.2.19Compiling proc-macro2 v1.0.87Compiling libc v0.2.159Compiling ahash v0.8.11Compiling rustix v0.38.37Compiling serde v1.0.210Compiling bitflags v2.6.0Compiling linux-raw-sys v0.4.14Compiling rustversion v1.0.17Compiling adler2 v2.0.0Compiling serde_json v1.0.128Compiling prettyplease v0.2.22Compiling memchr v2.7.4Compiling lexical-parse-integer v1.0.2Compiling miniz_oxide v0.8.0Compiling lexical-write-integer v1.0.2Compiling crc32fast v1.4.2Compiling regex-syntax v0.8.5Compiling aho-corasick v1.1.3Compiling ryu v1.0.18Compiling ident_case v1.0.1Compiling strsim v0.11.1Compiling fnv v1.0.7Compiling itoa v1.0.11Compiling lexical-write-float v1.0.2Compiling flate2 v1.0.34Compiling lexical-parse-float v1.0.2Compiling pkg-config v0.3.31Compiling vcpkg v0.2.15Compiling quote v1.0.37Compiling getrandom v0.2.15Compiling filetime v0.2.25Compiling unicode-width v0.1.14Compiling syn v2.0.79Compiling strum v0.26.3Compiling lexical-core v1.0.2Compiling base64 v0.22.1Compiling rust_decimal v1.36.0Compiling arrayvec v0.7.6Compiling hashlink v0.10.0Compiling fallible-streaming-iterator v0.1.9Compiling fallible-iterator v0.3.0Compiling num-integer v0.1.46Compiling num-complex v0.4.6Compiling half v2.4.1Compiling chrono v0.4.41Compiling atoi v2.0.0Compiling cast v0.3.0Compiling num-bigint v0.4.6Compiling num-iter v0.1.45Compiling xattr v1.3.1Compiling regex-automata v0.4.8Compiling tar v0.4.42Compiling num-rational v0.4.2Compiling num v0.4.3Compiling arrow-buffer v56.1.0Compiling darling_core v0.20.10Compiling arrow-data v56.1.0Compiling regex v1.11.0Compiling serde_derive v1.0.210Compiling strum_macros v0.26.4Compiling strum_macros v0.27.2Compiling arrow-array v56.1.0Compiling darling_macro v0.20.10Compiling darling v0.20.10Compiling comfy-table v7.1.1Compiling strum v0.27.2Compiling duckdb-loadable-macros v0.1.10Compiling arrow-select v56.1.0Compiling arrow-arith v56.1.0Compiling arrow-row v56.1.0Compiling arrow-cast v56.1.0Compiling arrow-string v56.1.0Compiling arrow-ord v56.1.0Compiling libduckdb-sys v1.4.0Compiling arrow v56.1.0Compiling duckdb v1.4.0Compiling rusty_quack v0.1.0 (/par/extension-template-rs-main)Finished `release` profile [optimized] target(s) in 30.01s

编译成功,从编译的so文件中查看导出函数是rusty_quack_init_c_api,直接load失败

/par/extension-template-rs-main# nm -D /par/librusty_quack.so |grep init
0000000000014530 T rusty_quack_init_c_api
/par/extension-template-rs-main# /par/duckdb140 -unsigned
DuckDB v1.4.0 (Andium) b8a06e4a22
Enter ".help" for usage hints.
D load '/par/librusty_quack.so';
Invalid Input Error:
Failed to load '/par/librusty_quack.so', The file is not a DuckDB extension. The metadata at the end of the file is invalid
D .exit

利用https://github.com/duckdb/extension-ci-tools/blob/main/scripts/append_extension_metadata.py脚本加入元数据后,就可以加载了。

/par# python3 appendmetadata.py -l librusty_quack.so -n rusty_quack -dv v1.2.0  --duckdb-platform linux_amd64 --extension-version 0.1
Creating extension binary:- Input file: librusty_quack.so- Output file: rusty_quack.duckdb_extension- Metadata:- FIELD8 (unused)            = EMPTY- FIELD7 (unused)            = EMPTY- FIELD6 (unused)            = EMPTY- FIELD5 (abi_type)          = C_STRUCT- FIELD4 (extension_version) = 0.1- FIELD3 (duckdb_version)    = v1.2.0- FIELD2 (duckdb_platform)   = linux_amd64- FIELD1 (header signature)  = 4 (special value to identify a duckdb extension)
/par# /par/duckdb140 -unsigned
DuckDB v1.4.0 (Andium) b8a06e4a22
Enter ".help" for usage hints.
D load '/par/rusty_quack.duckdb_extension';
D SELECT * FROM rusty_quack('Jane');
┌─────────────────────┐
│       column0       │
│       varchar       │
├─────────────────────┤
│ Rusty Quack Jane 🐥 │
└─────────────────────┘

同样的步骤用于duckdb-rs-main中的examples, load时报错,看来两边生成的so是不一样的。

http://www.dtcms.com/a/393753.html

相关文章:

  • 接口测试流程+jmeter并发+面试题(总结)
  • JMeter下载安装及入门教程
  • Oracle体系结构-Java Pool详解
  • ​​Service Worker 缓存 与 HTTP 缓存 是什么关系?
  • c++ 之三/五法则
  • 传输层协议 UDP
  • 关于类和对象(一)
  • 多人协作下的游戏程序架构 —— 分层方案
  • 机器学习中三个是基础的指标:​准确率 (Accuracy)​、精确率 (Precision)​​ 和 ​召回率 (Recall)​
  • 《Web端图像剪辑方案:Canvas API与JavaScript实现》
  • DeepSeek 登《自然》封面,OpenAI 推出 GPT-5-Codex,Notion Agent 首亮相!| AI Weekly 9.15-9.21
  • 多线程-初阶
  • 在 R 语言中,%>% 是 管道操作符 (Pipe Operator),它来自 magrittr 包(后被 dplyr 等 tidyverse 包广泛采用)
  • IMX6ULL学习笔记_Boot和裸机篇(1)--- SEGGER Embedded Studio 和 Uboot 环境搭建
  • 纯JS代码录制网页中的视频(可多线操作)
  • Javase 基础加强 —— 11 线程池
  • 分布式锁-Redis实现
  • 对于ModelScope的AI模型git部署感悟
  • [论文阅读] 人工智能 + 软件工程 | 从“人工扒日志”到“AI自动诊断”:LogCoT框架的3大核心创新
  • 【软考中级 - 软件设计师 - 应用技术】软件工程案例分析之软件测试实践
  • AI:读《老人与海》有感
  • 定制开发开源AI智能名片S2B2C商城小程序:产业互联网时代的创新商业模式
  • .env与.gitignore:现代软件开发中的环境管理与版本控制防护
  • 理解重参数化
  • css 给文本添加任务图片背景
  • CSS中的选择器、引入方式和样式属性
  • CSS 入门与常用属性详解
  • Linux 下 PostgreSQL 安装与常用操作指南
  • 【Linux】CentOS7网络服务配置
  • 使用C++编写的一款射击五彩敌人的游戏