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

编译Duckdb机器学习插件QuackML - 详解

从存储库下载源代码,并解压到/par

首先用duckdb 1.3的源代码编译,报错,头文件不存在

export LD_LIBRARY_PATH=/par/duck/build/src
g++ -fPIC -shared -o libtest2.so *.cpp -I /par/duck/src/include -lssl -lcrypto -I include -lduckdb -L /par/duck/build/src
In file included from quackml_extension.cpp:12:
include/functions/sum_count.hpp:11:10: fatal error: duckdb/core_functions/aggregate/nested_functions.hpp: No such file or directory
11 | #include "duckdb/core_functions/aggregate/nested_functions.hpp"

查看这个软件发布的日期,2024年4月,找到相应时间的DuckDB版本,下载源代码 和libduckdb库。解压缩头文件到/par/duckdb-0.10.3/include, 库文件到/par/duckdb-0.10.3/lib,

g++ -fPIC -shared -o libtest2.so *.cpp -I /par/duckdb-0.10.3/include -lssl -lcrypto -I include -lduckdb -L /par/duckdb-0.10.3/lib
In file included from /par/duckdb-0.10.3/include/duckdb/common/multi_file_reader_options.hpp:13,
from /par/duckdb-0.10.3/include/duckdb/execution/operator/csv_scanner/csv_reader_options.hpp:19,
from /par/duckdb-0.10.3/include/duckdb/common/serializer/deserializer.hpp:18,
from /par/duckdb-0.10.3/include/duckdb/main/secret/secret.hpp:13,
from /par/duckdb-0.10.3/include/duckdb/main/extension_util.hpp:14,
from quackml_extension.cpp:8:
/par/duckdb-0.10.3/include/duckdb/common/hive_partitioning.hpp:28:82: error: 'duckdb_re2' has not been declared
28 |         DUCKDB_API static std::map<string, string> Parse(const string &filename, duckdb_re2::RE2 &regex);|                                                                                  ^~~~~~~~~~

搜索了一下,duckdb_re2是在第3方目录下的re2中定义的,解压缩到/par,单独编译,报错,删除不识别的命令disable_target_warnings,生成了makefile, 可以生成了。

cd /par/re2
root@6ae32a5ffcde:/par/re2# mkdir build
root@6ae32a5ffcde:/par/re2# cd build
root@6ae32a5ffcde:/par/re2/build# cmake ..
-- The CXX compiler identification is GNU 14.2.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/local/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at CMakeLists.txt:104 (disable_target_warnings):
Unknown CMake command "disable_target_warnings".
-- Configuring incomplete, errors occurred!
See also "/par/re2/build/CMakeFiles/CMakeOutput.log".
root@6ae32a5ffcde:/par/re2/build# cmake ..
-- Configuring done
-- Generating done
-- Build files have been written to: /par/re2/build
root@6ae32a5ffcde:/par/re2/build# make
[  4%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/bitmap256.cc.o
[  8%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/compile.cc.o
[ 12%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/bitstate.cc.o
[ 16%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/dfa.cc.o
[ 20%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/filtered_re2.cc.o
[ 25%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/mimics_pcre.cc.o
[ 29%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/nfa.cc.o
[ 33%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/onepass.cc.o
[ 37%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/parse.cc.o
[ 41%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/perl_groups.cc.o
[ 45%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/prefilter.cc.o
[ 50%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/prefilter_tree.cc.o
[ 54%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/prog.cc.o
[ 58%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/re2.cc.o
[ 62%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/regexp.cc.o
[ 66%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/set.cc.o
[ 70%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/simplify.cc.o
[ 75%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/stringpiece.cc.o
[ 79%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/tostring.cc.o
[ 83%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/unicode_casefold.cc.o
[ 87%] Building CXX object CMakeFiles/duckdb_re2.dir/re2/unicode_groups.cc.o
[ 91%] Building CXX object CMakeFiles/duckdb_re2.dir/util/rune.cc.o
[ 95%] Building CXX object CMakeFiles/duckdb_re2.dir/util/strutil.cc.o
[100%] Linking CXX static library libduckdb_re2.a
[100%] Built target duckdb_re2

把上述路径加入-I , 然后在quackml_extension.cpp中添加#include “re2.h”, 仍然报错

g++ -fPIC -shared -o libtest2.so *.cpp */*.cpp -I /par/duckdb-0.10.3/include -lssl -lcrypto -I include -lduckdb -L /par/duckdb-0.10.3/lib -I /par/re2/re2
In file included from quackml_extension.cpp:5:
/par/re2/re2/re2.h:279:13: error: 'StringPiece' does not name a type
...
/usr/include/re2/stringpiece.h:34:7: note: 're2::StringPiece' declared here
34 | class StringPiece {
|       ^~~~~~~~~~~

这里怎么出现了一个/usr/include/re2/目录下的头文件?可能因为系统预装的re2,而系统预装的头文件不能被自动包含进去。
再看/par/re2/re2/re2.h中确实引用了re2/stringpiece.h, 那就是我们的-I 目录写错了,把#include "re2.h"改为#include “re2/re2.h”,-I 改为/par/re2,re2相关的错误没有了。还剩余一个函数参数个数不对错误。

g++ -fPIC -shared -o libtest2.so *.cpp */*.cpp -I /par/duckdb-0.10.3/include -lssl -lcrypto -I include -lduckdb -L /par/duckdb-0.10.3/lib -I /par/re2/
functions/linear_reg.cpp: In function 'void quackml::SlowLinearRegressionFinalize(duckdb::Vector&, duckdb::AggregateInputData&, duckdb::Vector&, idx_t, idx_t)':
functions/linear_reg.cpp:273:42: error: too many arguments to function 'std::vector<std::vector<double> > quackml::getGradientND(std::vector<std::vector<double> >&, std::vector<std::vector<double> >&, std::vector<std::vector<double> >&, double)'273 |             auto gradient = getGradientND(*state.sigma, *state.c, *state.theta, state.lambda, state.count);|                             ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~In file included from functions/linear_reg.cpp:5:include/functions/linear_reg_utils.hpp:21:38: note: declared here21 |     std::vector<std::vector<double>> getGradientND(std::vector<std::vector<double>> &sigma, std::vector<std::vector<double>> &c, std::vector<std::vector<double>> &theta, double lambda);

把linear_reg.cpp中的最后一个参数删除,编译通过。
虽然编译成功,在将它用python3 ./appendmetadata.py -l libtest2.so -n quackml -dv v1.3.0 --duckdb-platform linux_amd64 --extension-version 0.1 --abi-type ""转成插件后,总是报找不到符号错误,

/par/duckdb130 -unsigned
DuckDB v1.3.0 (Ossivalis) 71c5c07cdd
Enter ".help" for usage hints.
D load '/par/QuackML-main/src/quackml.duckdb_extension';
IO Error:
Extension "/par/QuackML-main/src/quackml.duckdb_extension" could not be loaded: /par/QuackML-main/src/quackml.duckdb_extension: undefined symbol: _ZN6duckdb18BaseScalarFunctionC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_6vectorINS_11LogicalTypeELb1EEES8_NS_17FunctionStabilityES8_NS_20FunctionNullHandlingE
export LD_LIBRARY_PATH=/par/duckdb-0.10.3/lib
root@6ae32a5ffcde:/par/QuackML-main/src# g++ -fPIC -shared -o libtest2.so *.cpp */*.cpp /par/re2/build/libduckdb_re2.a -
I /par/duckdb-0.10.3/include -lssl -lcrypto -I include -lduckdb -L /par/duckdb-0.10.3/lib -I /par/re2/
D load '/par/QuackML-main/src/quackml.duckdb_extension';
IO Error:
Extension "/par/QuackML-main/src/quackml.duckdb_extension" could not be loaded: /par/QuackML-main/src/quackml.duckdb_extension: undefined symbol: _ZNK6duckdb18BaseScalarFunction8ToStringB5cxx11Ev
D .exit

用了各种版本库文件和CLI,包括用0.10.3的duckdb CLI来调用,都未解决,还需要进一步研究

http://www.zskr.cn/news/28502.html

相关文章:

  • 数字音频作曲软件-钢琴窗-网格数量计算公式
  • 2025 深圳营销策划品牌最新推荐榜单:深耕多行业全案服务,权威评选助企业精准合作食品加工 / 物流 / 新能源营销策划推广公司推荐
  • 攻壳机动队 动画电影12部合集
  • 合成孔径雷达(SAR)成像仿真
  • 超越“系统性沉默”:“AI元人文”构想下的价值范式转换与游戏化探索
  • 通信协议(Http,websocket)
  • 轻松掌握:用 Python 的 pdfminer 将 PDF 内容保存为 Word 文档 - 详解
  • CodeForces-1183F Topforces Strikes Back
  • 2025 年最新螺旋地桩厂家推荐排行榜:聚焦光伏大棚等场景,甄选优质实力企业桩尖/大棚/组合/地螺丝螺旋地桩厂家推荐
  • 白鲸开源数据基建平台荣登“创客北京 2025”企业组TOP150,共同助 Agentic AI 行业变革
  • ORACLE检查并创建表空间和表分区
  • 禁用内核模块,是否需要执行脚本 $ sudo update-initramfs -u $ sudo update-grub ? - 详解
  • 2025 年东莞钢结构厂房施工公司最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析
  • 高性能AI股票预测分析报告 - 2025年10月23日
  • 2025 年电子万能试验机生产厂家最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析
  • Spring AI Alibaba Admin 正式开源!!
  • snack4-jsonpath v4.0.2 发布
  • 089_尚硅谷_switch的课堂练习
  • 自定义组件中监听properties里面的属性的方法里面去取另外的properties里面的属性拿不到值的问题
  • 嵌入式主板全景解析:从选型到趋势,读懂工业智能的核心载体
  • 2025 年小饭桌加盟品牌最新推荐排行榜:多元服务与深厚底蕴品牌小饭桌加盟连锁/小饭桌加盟连锁/小饭桌少儿托管加盟机构推荐
  • 2025 年托管班加盟品牌最新推荐排行榜:聚焦国内优质机构,为投资者精选靠谱加盟项目托管班机构加盟/儿童托管班中心加盟/课后托管班加盟/小学托管班加盟连锁推荐
  • vscode创建快捷代码块,同时配置vue2和vue3的快捷代码块
  • 终于能打出生僻字了!麒麟系统搜狗输入法完整安装指南 - 实践
  • docker 离线下载安装部署
  • PaperReading:《Manipulating Multimodal Agents via Cross-Modal Prompt Injection》 - 详解
  • 新手使用rocky10 过程中遇到问题:忘记root密码
  • 国标GB28181算法算力平台EasyGBS的云边协同的算力调度模式关键技术解析
  • WPF 和 Avalonia 开发者的 html css 前端指南 ScrollViewer 篇
  • 陈旧性瘢痕药物