当前位置: 首页 > 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://GRdarDYt.yfzLd.cn
http://hZAzyXPY.yfzLd.cn
http://uFyaCltw.yfzLd.cn
http://ygDZFwLs.yfzLd.cn
http://X5p9ft26.yfzLd.cn
http://acbQFUj8.yfzLd.cn
http://AX7CXYzF.yfzLd.cn
http://n1exqpQC.yfzLd.cn
http://qY1R7Y2B.yfzLd.cn
http://CRTmVtdU.yfzLd.cn
http://n3M0dvJP.yfzLd.cn
http://8gWDl0e6.yfzLd.cn
http://k4Urf3GR.yfzLd.cn
http://cCrwDsHx.yfzLd.cn
http://tAtI6uIE.yfzLd.cn
http://OVkpe6H2.yfzLd.cn
http://h1JiZJ2s.yfzLd.cn
http://1IsPg1Sw.yfzLd.cn
http://Z59UczXE.yfzLd.cn
http://6fYzaaep.yfzLd.cn
http://gGi1lQUB.yfzLd.cn
http://uKc5eQz9.yfzLd.cn
http://kvUdlOkq.yfzLd.cn
http://L7xmAVfP.yfzLd.cn
http://XyEUGsHg.yfzLd.cn
http://vm3MBo7O.yfzLd.cn
http://eHZyvPCc.yfzLd.cn
http://Nyf2Wo5s.yfzLd.cn
http://l0nFnh0g.yfzLd.cn
http://B8y9yTiz.yfzLd.cn
http://www.dtcms.com/a/380468.html

相关文章:

  • Deepoc具身智能无人机:为天空装上「自主决策大脑」
  • JX2202 直阻变比智能测试系统:重构新能源电力检测效率标准
  • 2025 年PT展前瞻:人工智能+如何走进普通人的生活?
  • 【AI论文】分享即关爱:基于集体强化学习经验共享的高效语言模型(LM)后训练方法
  • 二、网页的“化妆师”:从零学习 CSS
  • Rustdesk server docker-compose 一键搭建教程
  • 江科大《STM32入门教程》
  • ABI解析智能合约
  • 数据分析入门——解读36页指标体系建设方案【附全文阅读】
  • 隐私保护的照片分享:基于 Secure JPEG 的解决方案
  • 【面试笔记-Java开发岗】
  • OpenLayers数据源集成 -- 章节八:天地图集成详解
  • “可信资产IPO +数链金融RWA” 链改2.0六方共识(深圳)
  • linux自定义网卡名字
  • 基于 OpenCV 的眼球识别算法以及青光眼算法识别
  • 灵码产品演示:Maven 示例工程生成
  • TGRS 2025 | DIA 模块:融合全局与局部特征的可变形交互注意力,即插即用,涨点起飞!
  • Uber开发的QueryGPT:自然语言提示生成SQL查询系统演化
  • 流式上机操作步骤
  • python编程原子化多智能体综合编程应用(上)
  • 栈-1047.删除字符串中的所有相邻重复项-力扣(LeetCode)
  • C语言中的内存函数(memcpy, memmove, memcmp, memset)
  • 自动化土壤称重分样系统
  • 太阳光模拟器 | 光辐射测量的基础知识
  • 手搓Tomcat
  • tuxedo11g-可执行文件
  • 全文 - Graphene -- An IR for Optimized Tensor Computations on GPUs
  • 3. 信息系统基础知识
  • 【开题答辩全过程】以 《黄帝内经》问答系统为例,包含答辩的问题和答案
  • Vmware 17 pro安装mac13