交叉编译 libzdb

参考博客:移植libzdb3.2.2到arm_configure: error: no available database found or s_酣楼驻海的博客-CSDN博客

编译时间 2023-08-23

libzdb 下载:

源码访问如下:

https://bitbucket.org/tildeslash/libzdb/src/master/

git 下载链接

git clone https://bitbucket.org/tildeslash/libzdb.git

我将其同步到了 gitee,然后从 gitee 上下载的;

编译环境:

使用 ubuntu 18.04 版本;

在以下链接下载了 arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-linux-gnueabihf 交叉编译器;

https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads

编译:

1.源码下载后文件内容如下:

user:libzdb$ls
AUTHORS  bootstrap  CHANGES  config  configure.ac  COPYING  doc  libzdb.xcodeproj  Makefile.am  README  src  test  tools  zdb.pc.in

2.执行 bootstrap 生成 configure 文件

user:libzdb$./bootstrap 
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'config'.
libtoolize: linking file 'config/ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.
libtoolize: linking file 'm4/libtool.m4'
libtoolize: linking file 'm4/ltoptions.m4'
libtoolize: linking file 'm4/ltsugar.m4'
libtoolize: linking file 'm4/ltversion.m4'
libtoolize: linking file 'm4/lt~obsolete.m4'
configure.ac:46: installing 'config/compile'
configure.ac:103: installing 'config/config.guess'
configure.ac:103: installing 'config/config.sub'
configure.ac:8: installing 'config/install-sh'
configure.ac:8: installing 'config/missing'
Success
user:libzdb$ls
aclocal.m4  autom4te.cache  CHANGES  configure     COPYING  libzdb.xcodeproj  Makefile.am  README  test   zdb.pc.in
AUTHORS     bootstrap       config   configure.ac  doc      m4                Makefile.in  src     tools

3.使用 configure 来生成 Makefile

遇到问题1:configure: error: cross-compiling: please set 'libzdb_cv_setjmp_available=yes|no'

user:libzdb$./configure --host=arm-none-linux-gnueabihf
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for arm-none-linux-gnueabihf-strip... arm-none-linux-gnueabihf-strip
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
......................
checking dynamic linker characteristics... (cached) GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking setjmp is available... configure: error: cross-compiling: please set 'libzdb_cv_setjmp_available=yes|no'

使用如下代码来判断是否支持 setjmp;交叉编译后在目标平台上执行,如果两个 printf 都打印就支持;

#include <stdio.h>
#include <setjmp.h>jmp_buf jump_buffer;void test_jump() {longjmp(jump_buffer, 1);
}int main() {if (setjmp(jump_buffer) == 0) {printf("Calling test_jump()\n");test_jump();} else {printf("Back from test_jump()\n");}return 0;
}

4.使用新的命令编译,遇到问题2

libzdb_cv_setjmp_available=yes ./configure --host=arm-none-linux-gnueabihf

问题2:configure: error: cross-compiling: please set 'libzdb_cv_vsnprintf_c11_conformant=yes|no'

user:libzdb$libzdb_cv_setjmp_available=yes ./configure --host=arm-none-linux-gnueabihf
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for arm-none-linux-gnueabihf-strip... arm-none-linux-gnueabihf-strip
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
................
checking dynamic linker characteristics... (cached) GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking setjmp is available... (cached) yes
checking vsnprintf is c11 conformant... configure: error: cross-compiling: please set 'libzdb_cv_vsnprintf_c11_conformant=yes|no'

使用如下代码来判断是否支持 vsnprintf;交叉编译后在目标平台上执行,如果正常打印就支持;

#include <stdio.h>
#include <stdarg.h>void custom_printf(const char *format, ...) {char buffer[100];va_list args;va_start(args, format);vsnprintf(buffer, sizeof(buffer), format, args);va_end(args);printf("%s", buffer);
}int main() {custom_printf("Hello %s, you have %d messages.\n", "Alice", 5);return 0;
}

5.使用新的命令编译,遇到问题3

libzdb_cv_setjmp_available=yes libzdb_cv_vsnprintf_c11_conformant=yes ./configure --host=arm-none-linux-gnueabihf

问题3:configure: error: No available database found or selected. Try configure --help

user:libzdb$libzdb_cv_setjmp_available=yes libzdb_cv_vsnprintf_c11_conformant=yes ./configure --host=arm-none-linux-gnueabihf
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for arm-none-linux-gnueabihf-strip... arm-none-linux-gnueabihf-strip
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
...............................
checking for SQLite3... yes
checking for library containing sqlite3_open... no
checking for mysql... yes
checking for mysql_config... no
configure: WARNING: mysql_config is required to build libzdb with mysql
checking for oracle... checking if Oracle support is enabled... no
configure: error: No available database found or selected. Try configure --help

需要指定数据库,使用了 --with-sqlite

6.使用新的命令编译,遇到问题4

libzdb_cv_setjmp_available=yes libzdb_cv_vsnprintf_c11_conformant=yes ./configure --host=arm-none-linux-gnueabihf --with-sqlite

问题4:configure: error: cannot check for file existence when cross compiling

user:libzdb$libzdb_cv_setjmp_available=yes libzdb_cv_vsnprintf_c11_conformant=yes ./configure --host=arm-none-linux-gnueabihf --with-sqlite
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for arm-none-linux-gnueabihf-strip... arm-none-linux-gnueabihf-strip
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables
...............................
checking for timegm... yes
checking for library containing pthread_create... none required
checking for postgresql... yes
checking for pg_config... no
configure: WARNING: pg_config is required to build libzdb with postgresql
checking for SQLite3... yes
checking for yes... configure: error: cannot check for file existence when cross compiling

修改 configure 文件,将含有 "cannot check for file existence when cross compiling" 的行给注释掉,我一共注释了三行;

7.继续编译,遇到问题5

libzdb_cv_setjmp_available=yes libzdb_cv_vsnprintf_c11_conformant=yes ./configure --host=arm-none-linux-gnueabihf --with-sqlite

问题5:configure: error: No available database found or selected. Try configure --help

user:libzdb$libzdb_cv_setjmp_available=yes libzdb_cv_vsnprintf_c11_conformant=yes ./configure --host=arm-none-linux-gnueabihf --with-sqlite
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for arm-none-linux-gnueabihf-strip... arm-none-linux-gnueabihf-strip
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
...............................
configure: WARNING: pg_config is required to build libzdb with postgresql
checking for SQLite3... yes
checking for yes... no
checking for library containing sqlite3_open... no
checking for mysql... yes
checking for mysql_config... no
configure: WARNING: mysql_config is required to build libzdb with mysql
checking for oracle... checking if Oracle support is enabled... no
configure: error: No available database found or selected. Try configure --help

 需要指定 sqlite3 库的路径,文件放置如下:

user:sqlite3_bin$tree 
.
├── include
│   └── sqlite3.h
└── lib├── libsqlite3.so -> libsqlite3.so.0.8.6├── libsqlite3.so.0 -> libsqlite3.so.0.8.6└── libsqlite3.so.0.8.6

修改 --with-sqlite 为 --with-sqlite=/opt/liangtao/libs/sqlite3_bin/

8. 使用新命令编译,配置成功

libzdb_cv_setjmp_available=yes libzdb_cv_vsnprintf_c11_conformant=yes ./configure --host=arm-none-linux-gnueabihf --with-sqlite=/opt/liangtao/libs/sqlite3_bin/

9. 直接 make 遇到问题 6

问题6:./tools/bin/filterh < src/zdb.h > zdb/zdb.h || exit 1

user:libzdb$make 
./tools/bin/filterh < src/zdb.h > zdb/zdb.h || exit 1
/lib/ld-linux-armhf.so.3: No such file or directory
Makefile:1248: recipe for target 'zdb/zdb.h' failed
make: *** [zdb/zdb.h] Error 1
user:libzdb$

由于 filterh 是 arm 格式的,所以遇到该问题;

解决方法:重新下载一份源码,在源码顶层目录,直接运行以下命令,报错不用处理;

./bootstrap && ./configure

将 x86 的 ./tools/bin/filterh 替换交叉编译器相同的目录下的 filterh 文件;

user:libtmp$ls -al ./tools/bin/filterh 
-rwxrwxr-x 1 vmuser vmuser 23568 Aug 23 16:15 ./tools/bin/filterh
user:libtmp$file  ./tools/bin/filterh
./tools/bin/filterh: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=27cebe5d15f6c87b477fb1e0f69e283428cc4288, not stripped

10. 继续编译遇到问题 7

问题7:re2c: error: line 201, column 22: unrecognized configuration 'eof'

user:libzdb$make 
./tools/bin/filterh < src/zdb.h > zdb/zdb.h || exit 1
./tools/bin/filterh < src/zdbpp.h > zdb/zdbpp.h || exit 1
./tools/bin/filterh < src/db/ConnectionPool.h > zdb/ConnectionPool.h || exit 1
./tools/bin/filterh < src/db/Connection.h > zdb/Connection.h || exit 1
./tools/bin/filterh < src/db/ResultSet.h > zdb/ResultSet.h || exit 1
./tools/bin/filterh < src/net/URL.h > zdb/URL.h || exit 1
./tools/bin/filterh < src/db/PreparedStatement.h > zdb/PreparedStatement.h || exit 1
./tools/bin/filterh < src/exceptions/SQLException.h > zdb/SQLException.h || exit 1
./tools/bin/filterh < src/exceptions/Exception.h > zdb/Exception.h || exit 1
.................
ystem/System.c -o src/system/System.o >/dev/null 2>&1
/usr/bin/re2c -i src/system/Time.re > src/system/Time.c
re2c: error: line 201, column 22: unrecognized configuration 'eof'
Makefile:1261: recipe for target 'src/system/Time.c' failed
make[2]: *** [src/system/Time.c] Error 1
.................
Makefile:505: recipe for target 'all' failed
make: *** [all] Error 2

将文件 src/system/Time.re line 201 删除 

11.继续编译遇到问题 8

user:libzdb$make
make  all-recursive
make[1]: Entering directory '/opt/liangtao/libs/libzdb'
Making all in .
make[2]: Entering directory '/opt/liangtao/libs/libzdb'
/usr/bin/re2c -i src/system/Time.re > src/system/Time.c
re2c: error: line 211, column 17: unexpected character: '$'

接着将报错的行删除;

总的修改后 src/system/Time.re 文件如下:

diff --git a/src/system/Time.re b/src/system/Time.re
index 5b092e4..7b355ac 100644
--- a/src/system/Time.re
+++ b/src/system/Time.re
@@ -198,7 +198,6 @@ struct tm *Time_toDateTime(const char *s, struct tm *t) {re2c:define:YYLIMIT         = limit;re2c:define:YYMARKER        = marker;re2c:yyfill:enable          = 0;
-                 re2c:eof                    = 0;re2c:flags:case-insensitive = 1;any  = [\000-\377];
@@ -209,10 +208,6 @@ struct tm *Time_toDateTime(const char *s, struct tm *t) {frac = [.,][0-9]+;mmm  = ("jan"|"feb"|"mar"|"apr"|"may"|"jun"|"jul"|"aug"|"sep"|"oct"|"nov"|"dec");-                 $
-                 { // EOF
-                        THROW(SQLException, "Invalid date or time");
-                 }yyyy x dd x dd{ // Date: YYYY-MM-DD

12. 继续编译,后面遇到链接报错,没有在意,因为库文件已经编出;

user:libzdb$ls -a ./.libs/
.  ..  libzdb.a  libzdb.la  libzdb.lai  libzdb.so  libzdb.so.13  libzdb.so.13.1.0
user:libzdb$file ./.libs/libzdb.so.13.1.0
./.libs/libzdb.so.13.1.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, with debug_info, not stripped

注:删除的代码带来的影响不知;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/102320.html

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

相关文章

低代码开发ERP:精打细算,聚焦核心投入

企业数字化转型已经成为现代商业环境中的一项关键任务。如今&#xff0c;企业面临着日益激烈的竞争和不断变化的市场需求。在这样的背景下&#xff0c;数字化转型不仅是企业生存的必然选择&#xff0c;也是取得竞争优势和实现可持续发展的关键因素。 在数字化转型的过程中&…

[oneAPI] 基于BERT预训练模型的英文文本蕴含任务

[oneAPI] 基于BERT预训练模型的英文文本蕴含任务 Intel DevCloud for oneAPI 和 Intel Optimization for PyTorch基于BERT预训练模型的英文文本蕴含任务语料介绍数据集构建 模型训练 结果参考资料 比赛&#xff1a;https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0…

3D数据转换工具HOOPS Exchange概览

HOOPS Exchange SDK是一组C软件库&#xff0c;使开发团队能够快速为其应用程序添加可靠的2D和3D CAD导入和导出功能。这允许访问广泛的数据&#xff0c;包括边界表示&#xff08;BREP&#xff09;、产品制造信息&#xff08;PMI&#xff09;、模型树、视图、持久ID、样式、构造…

使用 MATLAB 和 Simulink 对雷达系统进行建模和仿真

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Redis多机实现

Background 为啥要有多机--------------1.容错 2.从服务器分担读压力。 主从结构一大难题------------如何保障一致性&#xff0c;对这个一致性要求不是很高&#xff0c;因为redis是用来做缓存的 同时我们要自动化进行故障转移-------哨兵机制&#xff0c;同时哨兵也可能cra…

使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。

1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 拉取mysql:5.6和owncloud的镜像和生成实例 [rootlocalhost ~]# docker pull mysql:5.6 [rootlocalhost ~]# docker pull ownclound [rootlocalhost ~]# docker run -d --name mydb1 --env MYSQL_ROOT_PASSWO…

智慧工地:安防监控EasyCVR智慧工地视频监管风险预警平台的应用

智慧工地方案是一种结合现代化技术与工地管理实践的创新型解决方案。它通过实时监控、数据分析、人工智能等技术手段&#xff0c;使工地管理更加高效、智能化。在建设智慧工地的过程中&#xff0c;除了上述提到的利用物联网技术实现设备互联、数据采集及分析以外&#xff0c;还…

python - 编程中【工厂模式】和【单例模式】区别以及代码示例详解

一. 概念 工厂模式和单例模式都是面向对象编程中常用的设计模式。 工厂模式&#xff08;FactoryPattern&#xff09;&#xff1a;是一种创建型模式&#xff0c;它提供了一种方法来创建对象&#xff0c;而不需要暴露对象的创建逻辑。这种模式通过定义一个工厂类&#xff0c;通…

远程端口转发 实践 如何将物理机某一端口的服务转发到vps上,使得外网能访问到

以本机1470端口&#xff08;我的sqli-labs&#xff09;与vps的9023端口为例。 SSH基本的连接命令是&#xff1a; ssh usernamehostname这里牵扯到了两台主机&#xff0c;一是执行命令、运行SSH客户端的主机&#xff0c;我们称为本地主机A【Host A】&#xff1b;二是接收连接请…

小程序运营方式有哪些?如何构建小程序运营框架?

​如今&#xff0c;每个企业基本都做过至少一个小程序&#xff0c;但由于小程序本身不具备流量、也很少有自然流量&#xff0c;因此并不是每个企业都懂如何运营小程序。想了解小程序运营方式方法有哪些&#xff1f; 在正式运营小程序前&#xff0c;了解小程序的功能与企业实际经…

Heikin Ashi最简单的一种烛台移动平均线

是不是每次进行交易的时候&#xff0c;市场上的各种新闻真真假假&#xff0c;搞的交易者每次都分不清楚&#xff0c;今天FPmarkets澳福给各位投资者推荐一种交易策略——“Heikin Ashi” “Heikin Ashi”只通过四个参数构建&#xff1a;开盘价、收盘价、最高价和最低价(最大和…

ssm汽车养护管理系统源码和论文

ssm汽车养护管理系统038 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 开题报告内容&#xff1a;&#xff08;研究现状、目的意义&#xff1b;基本内容、研究方法、参考文献等。&#xff09; 研究现状 国外…

chapter 3 Free electrons in solid - 3.1 自由电子模型

3.1 自由电子模型 Free electron model 研究晶体中的电子&#xff1a; 自由电子理论&#xff1a;不考虑离子实能带理论&#xff1a;考虑离子实&#xff08;周期性势场&#xff09;的作用 3.1.1 德鲁德模型 Drude Model - Classical Free Electron Model (1)德鲁德模型 德鲁…

golang 协程的实现原理

核心概念 要理解协程的实现, 首先需要了解go中的三个非常重要的概念, 它们分别是G, M和P, 没有看过golang源代码的可能会对它们感到陌生, 这三项是协程最主要的组成部分, 它们在golang的源代码中无处不在. G (goroutine) G是goroutine的头文字, goroutine可以解释为受管理的…

React(7)

1.React Hooks 使用hooks理由 1. 高阶组件为了复用&#xff0c;导致代码层级复杂 2. 生命周期的复杂 3. 写成functional组件,无状态组件 &#xff0c;因为需要状态&#xff0c;又改成了class,成本高 1.1 useState useState();括号里面处的是初始值&#xff1b;返回的是一个…

2023年大数据与区块链国际会议 | EI、Scoups检索

会议简介 Brief Introduction 2023年大数据与区块链国际会议&#xff08;ICBDB 2023&#xff09; 会议时间&#xff1a;2023年11月17 -19日 召开地点&#xff1a;中国西安 大会官网&#xff1a;www.icobdb.org 2023年大数据与区块链国际会议&#xff08;ICBDB 2023&#xff09;…

论文及代码详解——Restormer

文章目录 论文详解Overall pipelineMulti-Dconv Head Transposed AttentionGated-Dconv Feed-Forward Network 代码详解 论文&#xff1a;《Restormer: Efficient Transformer for High-Resolution Image Restoration》 代码&#xff1a;https://github.com/swz30/Restormer 论…

Jmeter常用线程组设置策略

一、前言 ​ 在JMeter压力测试中&#xff0c;我们时常见到的几个场景有&#xff1a;单场景基准测试、单场景并发测试、单场景容量测试、混合场景容量测试、混合场景并发测试以及混合场景稳定性测试 在本篇文章中&#xff0c;我们会用到一些插件&#xff0c;在这边先给大家列出&…

Git问题:解决“ssh:connect to host github.com port 22: Connection timed out”

操作系统 Windows11 使用Git IDEA 连接方式&#xff1a;SSH 今天上传代码出现如下报错&#xff1a;ssh:connect to host github.com port 22: Connection timed out 再多尝试几次&#xff0c;依然是这样。 解决 最终发现两个解决方案&#xff1a;&#xff08;二选一&#xf…

Django实现音乐网站 ⒀

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是推荐页-推荐排行榜、推荐歌手功能开发。 目录 推荐页开发 推荐排行榜 单曲表增加播放量 表模型增加播放量字段 执行表操作 模板中显示外键对应值 表模型外键设置 获取外键对应模型值 推荐排行榜视图 推…