實現調用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
英文地址,請注明出處:http://en.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 接口和類…