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

达成调用libchdb.a静态连接库中的未公开导出函数

前文写了调用libchdb.so动态连接库中的未公开导出函数的方法,不久前chdb发布了3.6版,其中提供了静态链接库。
尝试编译一个不依赖庞大动态连接库libchdb.so的程序,获得了成功,以下是操作步骤。
1.下载chdb静态连接库

wget https://github.com/chdb-io/chdb/releases/download/v3.6.0/linux-aarch64-libchdb-static.tar.gz -c

2.解压缩

tar xf linux-aarch64-libchdb-static.tar.gz
ll
-rw-r--r-- 1 kylin kylin 14491 98 16:20 chdb.h
-rw-r--r-- 1 kylin kylin 16708 98 16:20 chdb.hpp
-rw-r--r-- 1 kylin kylin 1221436992 98 16:05 libchdb.a

可见它包含两个头文件,和一个1.2GB的静态连接库libchdb.a。而3.5版动态连接库比这小多了,只有一个头文件chdb.h文件。

-rw-r--r-- 1 kylin kylin 10287 79 16:11 chdb.h
-rwxr-xr-x 1 kylin kylin 567703784 79 16:06 libchdb.so

3.用前文中同一个源程序编译目标文件

g++ -c bna.cpp

它不会检查调用的外部文件
4.将上一步的目标文件和libchdb.a链接

g++ bna.o chdba/libchdb.a -o bna

报错如下,条目很多,列举3条不同的

chdba/libchdb.a(krb5__threads.c.o):在函数‘krb5int_thread_support_init__aux’中:
(.text.krb5int_thread_support_init__aux+0x114):对‘pthread_once’未定义的引用
chdba/libchdb.a(krb5__plugins.c.o):在函数‘krb5int_open_plugin’中:
(.text.krb5int_open_plugin+0x3c):对‘dlopen’未定义的引用
chdba/libchdb.a(libclickhouse_common_io__QueryProfiler.cpp.o):在函数‘DB::Timer::set(unsigned long)’中:
(.text+0x16c):对‘timer_settime’未定义的引用

查阅资料得知,它们分别依赖动态库pthread、dl和rt,把它们都加到命令行,连接成功。

g++ bna.o chdba/libchdb.a -o bna -lpthread -ldl -lrt
ls -l bna
-rwxrwxr-x 1 kylin kylin 187010224 912 13:20 bna
./bna
Addition result: 111111111011111111100
Multiplication result: 1219326311370217952237463801111263526900

链接后的文件有187MB,比静态库和动态库都小得多,当然对于这么点大数运算功能而言,还是太大了,本文仅作为技术上可实现的讨论。

http://www.wxhsa.cn/company.asp?id=5687

相关文章:

  • 一些寄存器相关的知识
  • Redis常用命令
  • 力扣42题 接雨水,力扣84题 柱状图中最大的矩形,力扣739题 每日温度
  • 使用HTTPS 服务在浏览器端启用摄像头的方式解析
  • 5分钟SAE极速部署Dify,高效开发AI智能体应用
  • .NET驾驭Word之力:理解Word对象模型核心 (Application, Document, Range)
  • 事件轮循机制EventLoop
  • ruoyi-vue初步接触
  • AT_arc180_c [ARC180C] Subsequence and Prefix Sum
  • 如何快速看懂「祖传项目」?Qoder 强势推出新利器
  • 测试不再碎片化:AI智能体平台「项目资料套件」功能上线!
  • 大模型与知识图谱驱动测试公开课
  • 上位机项目展示
  • 美化自己的Github主页-Github profile页面仓库使用指南
  • 充气泵方案:充气泵用数字传感器有什么好处?
  • windows系统下anaconda的安装和使用
  • Lock分析:systemstate分析row cache lock
  • mysql查看连接数,从查询到优化
  • 遗传算法与偏最小二乘结合的化学光谱变量选择方法
  • 云剪贴板
  • 读书笔记:Oracle数据库的水位线秘密:为什么空表查询还很慢?
  • AI测试平台自动遍历:低代码也能玩转全链路测试
  • 0代码5分钟一键生成Springboot+Vue后台管理系统
  • nvm与node.js的安装指南
  • 故障处理:2分钟处理Oracle RAC中OCR磁盘组丢失磁盘的故障
  • Saga分布式事务框架执行逻辑
  • 在Android开发中实现两个Intent跳转及数据交换的方法
  • ARC188 做题记
  • AT_arc145_d [ARC145D] Non Arithmetic Progression Set
  • Microsoft AI Genius | 第三集实战课正式开启:用 Copilot Studio 定制你的专属智能体