实现调用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.pswp.cn/news/922262.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/922262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTPS 端口号详解 443 端口作用、iOS 抓包方法、常见 HTTPS 抓包工具与网络调试实践

在现代互联网中,几乎所有移动应用和网站都使用 HTTPS 协议 来保障数据安全。而 HTTPS 的默认端口就是 443。相比 HTTP 的 80 端口,443 不仅增加了 SSL/TLS 加密,还涉及到证书验证和加密握手,这使得开发者在进行 HTTPS 抓包 时面临…

【Python系列PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘pyqt5’问题

【Python系列PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘pyqt5’问题 摘要 在日常Python开发中,使用PyCharm控制台执行pip install时经常会遇到ModuleNotFoundError: No module named pyqt5等类似报错。这类报错不仅…

“可信资产IPO +数链金融RWA” 链改2.0六方共识(深圳)

“可信资产IPO 数链金融RWA”链改2.0六方共识【2025年8月30日 深圳】全球数链金融的建设者、创新者与决策者:我们——来自“生态、项目、资金、合规、技术、行业”六方领域的实践者,在链改1.0的基础上于深圳达成链改2.0时代核心共识:以“可信…

华为云 GaussDB:金融级高可用数据库,为核心业务保驾护航

一、文档概述在数字化浪潮席卷全球的当下,数据已成为企业发展的核心战略资产,而数据库作为数据存储、管理与交互的核心载体,其稳定性、可靠性与安全性直接决定了企业业务的连续性与竞争力。尤其在对数据准确性、业务连续性要求近乎苛刻的金融…

Docker快速入门手册

文章目录一、安装验证是否安装成功二、Docker命令镜像容器数据卷管理网络模式三、Dockerfile推送至镜像仓库阿里云ECI弹性容器部署阿里云Serverless应用引擎SAE部署阿里云FC函数部署容器四、Docker Compose::: tip 简介Docker是一种开源的应用容器引擎,让开发者能够…

Golang并发编程及其高级特性

并发编程模型 线程模型:Go的GoroutineGoroutine(M:N 模型) package mainimport ("fmt""runtime""sync""time" )func main() {// 查看当前机器的逻辑CPU核心数,决定Go运行时使用多少OS线程…

弧形导轨如何提升新能源汽车的能效和续航里程?

弧形导轨在新能源汽车中的应用主要集中在电池生产线和自动化装配线等领域,通过提高生产效率和精度,间接提升新能源汽车的能效和续航里程。高精度装配:在新能源汽车的电池生产线中,弧形导轨用于高精度的自动化装配设备,…

考研择校考虑因素和备考流程

考研择校一、选择专业二、选择学校三、考研计划安排一、选择专业 1、了解自己的未来工作规划(这里肯定没有啥规划); 2、连接考研的相关几个专业哪个好就业(公务员和找工作); 3、知乎、小红书、deepseek都可…

1.13 Memory Profiler Package - Unity Objects(unity对象页签)

1.Unity Objects(Unity对象页签)简介 2.界面功能参数1.Unity Objects(Unity对象页签)简介 Unity Objects用于快速定位unity对象内存占用的类型和具体实例a.查找内存占用最大的资源, 判断这些资源是否可以压缩或延迟加载b.查找重复加载的资源c.查看运行时创建但是没有释放的资源…

Android真机-安装Reqable证书-抓SSL包

使用Reqable的自动安装系统证书无法正常抓包,所以就有了这篇文章超简单的安装方式 - 记得确保手机已拥有root权限一、从Reqable导出公钥证书无需使用OpenSSL 将 .pem 文件转换为 .0 格式注意是 .0 格式的这个证书二、推送证书到手机adb root adb remount adb push 证…

[超表面论文快讯-242] PR-微波超四元数涡旋阵列洛书加权锁定成像加密-江南大学王继成、上海科技大学王雄团队

栏目介绍: “论文快讯”栏目旨在精简地分享一周内发表在高水平期刊上的Metasurface领域研究成果,帮助读者及时了解领域前沿动态,如果对专栏的写法或内容有什么建议欢迎留言,后续会陆续开启其他专栏,敬请期待。 论文基…

案例研究:构建一个 Markdown 编辑器

引言:Markdown 编辑器案例在 Electron Node.js 开发中的研究价值与必要性 在 Electron 框架的实际项目应用中,构建一个 Markdown 编辑器是展示其强大能力的经典案例研究。它不仅仅是一个简单的文本工具,更是开发者通过完整项目演示 Electron…

十四十五. 图论

树与图的存储 树是一种特殊的图,与图的存储方式相同。 对于无向图中的边ab,存储两条有向边a->b, b->a。 因此我们可以只考虑有向图的存储。 (1) 邻接矩阵:g[a][b] 存储边a->b (2) 邻接表: // 对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单…

内存管理这一块

文章目录前言一、C/C内存分布二、C语言中动态内存管理方式三.C的内存管理方式new/delete操作内置类型new/delete操作自定义类型四.定位new总结前言 在一行一行的代码之中,不同的数据存放的位置是有所不同的,正是因为这些数据的性质不同,所以…

linux 环境下Docker 安装

Docker在线安装 参考 :https://juejin.cn/book/6844733746462064654/section/6844733746545950734#heading-0 Ubuntu 环境下安装 $ apt-get install apt-transport-https ca-certificates curl software-properties-common $ install -m 0755 -d /etc/apt/keyrin…

Netty从0到1系列之Netty启动细节分析

文章目录一、Netty服务器端启动细节分析1.1 实现一个简单的http服务器1.2 服务器端启动细节分析1.3 创建与初始化 NioServerSocketChannel1.3.1 **通过反射工厂创建 Channel**:1.3.2 **初始化 Channel**1.4 注册到 Boss EventLoopGroup1.4.1 **异步提交注册任务**1.…

一个海康相机OCR的程序

这是一个极其复杂和庞大的​​机器视觉检测程序​​,其核心特点是​​多重冗余、条件判断和流程分支​​。它并非一个简单的线性流程,而是一个为应对各种复杂工业场景(如光照变化、产品位置偏移、识别难度高等)而设计的​​决策网…

深入解析:preload与prefetch的区别及最佳实践

在前端性能优化领域&#xff0c;资源加载策略直接影响页面的加载速度和用户体验。<link>标签的preload和prefetch属性是浏览器提供的两种关键资源预加载机制&#xff0c;它们都能提前加载资源&#xff0c;但适用场景和行为逻辑却大不相同。本文将从定义、触发时机、优先级…

[论文阅读] 人工智能 + 软件工程(漏洞检测)| 工业场景漏洞检测新突破:CodeBERT跨领域泛化能力评估与AI-DO工具开发

工业场景漏洞检测新突破&#xff1a;CodeBERT跨领域泛化能力评估与AI-DO工具开发 论文信息 论文原标题&#xff1a;Cross-Domain Evaluation of Transformer-Based Vulnerability Detection: Open-Source vs. Industrial Data引文格式&#xff08;APA&#xff09;&#xff1a;[…

【层面一】C#语言基础和核心语法-01(类型系统/面向对象/异常处理)

文章目录1 类型系统1.1 为什么需要类型&#xff1f;1.2 .NET 类型系统的两大支柱&#xff1a;CTS 和 CLS1.3 最根本的分类&#xff1a;值类型 vs 引用类型1.4 内置类型 vs. 自定义类型1.5 类型转换1.6 通用基类&#xff1a;System.Object2 面向对象编程2.1 类和对象2.2 接口和类…