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

编译DuckDB c++插件模板并加载运行

到DuckDB c++插件模板官方存储库网页下载源代码压缩包,解压缩到/par
采用如下命令行编译和添加元数据,其中/par/duck/src/include是duckdb.hpp所在目录,/par/duck/build/src是libduckdb.so所在目录。

g++ -fPIC -shared -o libtest2.so *.cpp -I /par/duck/src/include -lssl -lcrypto -I include -lduckdb -L /par/duck/build/srcpython3 ./appendmetadata.py -l libtest2.so -n quack -dv v1.2.0  --duckdb-platform linux_amd64 --extension-version 0.1

如果不指定-lduckdb, load时会报undefined symbol错误。

root@6ae32a5ffcde:/par/extension-template-main/src# /par/duckdb130 -unsigned
DuckDB v1.3.0 (Ossivalis) 71c5c07cdd
Enter ".help" for usage hints.
D load '/par/extension-template-main/src/quack.duckdb_extension';
IO Error:
Extension "/par/extension-template-main/src/quack.duckdb_extension" could not be loaded: /par/extension-template-main/src/quack.duckdb_extension: undefined symbol: _ZNK6duckdb18BaseScalarFunction8ToStringB5cxx11Ev

此外,还要指定LD_LIBRARY_PATH环境变量,否则会报could not be loaded: libduckdb.so错误

root@6ae32a5ffcde:/par/extension-template-main/src# /par/duckdb130 -unsigned
DuckDB v1.3.0 (Ossivalis) 71c5c07cdd
Enter ".help" for usage hints.
D load '/par/extension-template-main/src/quack.duckdb_extension';
IO Error:
Extension "/par/extension-template-main/src/quack.duckdb_extension" could not be loaded: libduckdb.so: cannot open shared object file: No such file or directory
D .exit
root@6ae32a5ffcde:/par/extension-template-main/src# export LD_LIBRARY_PATH=/par/duck/build/src
root@6ae32a5ffcde:/par/extension-template-main/src# /par/duckdb130 -unsigned
DuckDB v1.3.0 (Ossivalis) 71c5c07cdd
Enter ".help" for usage hints.
D load '/par/extension-template-main/src/quack.duckdb_extension';
IO Error:
File "/par/extension-template-main/src/quack.duckdb_extension" did not contain function "quack_init_c_api": /par/extension-template-main/src/quack.duckdb_extension: undefined symbol: quack_init_c_api

这是因为这是c++模板,并不存在quack_init_c_api函数,可以用nm命令验证,而我们在appendmetadata.py中未指定abi_type,默认就是c api

nm -D quack.duckdb_extension |grep quack_init000000000001648d T quack_init

所以需要人工指定abi_type为空字符串,但是坏处就是开始挑版本了

python3 ./appendmetadata.py -l libtest2.so -n quack -dv v1.2.0  --duckdb-platform linux_amd64 --extension-version 0.1 --abi-type ""root@6ae32a5ffcde:/par/extension-template-main/src# /par/duckdb130 -unsigned
DuckDB v1.3.0 (Ossivalis) 71c5c07cdd
Enter ".help" for usage hints.
D load '/par/extension-template-main/src/quack.duckdb_extension';
Invalid Input Error:
Failed to load '/par/extension-template-main/src/quack.duckdb_extension', The file was built specifically for DuckDB version 'v1.2.0' and can only be loaded with that version of DuckDB. (this version of DuckDB is 'v1.3.0')

将版本改成1.3.0, 通过

python3 ./appendmetadata.py -l libtest2.so -n quack -dv v1.3.0  --duckdb-platform linux_amd64 --extension-version 0.1 --abi-type ""
Creating extension binary:- Input file: libtest2.so- Output file: quack.duckdb_extension- Metadata:- FIELD8 (unused)            = EMPTY- FIELD7 (unused)            = EMPTY- FIELD6 (unused)            = EMPTY- FIELD5 (abi_type)          =- FIELD4 (extension_version) = 0.1- FIELD3 (duckdb_version)    = v1.3.0- FIELD2 (duckdb_platform)   = linux_amd64- FIELD1 (header signature)  = 4 (special value to identify a duckdb extension)
root@6ae32a5ffcde:/par/extension-template-main/src# /par/duckdb130 -unsigned
DuckDB v1.3.0 (Ossivalis) 71c5c07cdd
Enter ".help" for usage hints.
D load '/par/extension-template-main/src/quack.duckdb_extension';
D select quack('jack');
┌───────────────┐
│ quack('jack') │
│    varchar    │
├───────────────┤
│ Quack jack 🐥 │
└───────────────┘D select quack_openssl_version('abc');
┌───────────────────────────────────────────────────────────────────┐
│                   quack_openssl_version('abc')                    │
│                              varchar                              │
├───────────────────────────────────────────────────────────────────┤
│ Quack abc, my linked OpenSSL version is OpenSSL 3.0.15 3 Sep 2024 │
└───────────────────────────────────────────────────────────────────┘
http://www.dtcms.com/a/411717.html

相关文章:

  • 做logo什么网站河田镇建设局网站
  • OA、PMES、TMES、SAP、PPM、CRM、DMS、HR系统
  • C语言 ——— 指针
  • 内力网站建设seo简单优化
  • 大模型-自编码器(AutoEncoder)原理(上)
  • Promise开发【进阶】
  • 建立网站需要备案吗网络科技公司起名字大全免费
  • solidworks ppo 试做1
  • Matter over Thread方案,如何助力智能家居生态互通?
  • 创办网站需要怎么做wordpress 点评类网站
  • 网站开发与运营怎么样0基础网站开发
  • mp3链接地址制作网站网站建设与开发选题
  • Dify 从入门到熟悉100 天的学习大纲
  • 为什么做的网站要续费东莞cms建站模板
  • 安徽省高速公路建设指挥部网站为什么实验楼网站上做实验这么卡
  • Java Web应用开发——第一章:Java Web概述测验
  • 北京网站建设哪家好免费正能量不良网站推荐
  • 高端网站建设公司有哪些项目南京房地产开发公司
  • 网络编程
  • VGG改进(11):基于WaveletAttention的模型详解
  • 安徽建筑大学学工在线网站代理网游
  • 网站流量是什么承包工程在哪个网站
  • 游标查询在对话历史场景下的独特优势
  • 临沂做网站的在哪里看看铜陵新闻
  • 密云区社区建设网站蚌埠网站建设中心
  • 参考数据和主数据考试考点及关系梳理
  • 临沂供电公司网站看网红直播做爰的网站
  • 最小修改com.anji-plusjar包使之能够在springboot3使用
  • 武安网站建设价格网站建设公司做ppt吗
  • 【Arxiv 2025】重磅发布!全新傅里叶残差通道注意力模块FRCA,助显著性目标检测与跨模态融合,精准提升深度学习性能!