首页 > 其他分享 >如何将跨语言框架thrift移植到ARM64芯片的全过程

如何将跨语言框架thrift移植到ARM64芯片的全过程

时间:2024-07-17 16:26:29浏览次数:17  
标签:芯片 so.1 math so ARM64 -- 79.0 libboost thrift

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


thrift介绍

Thrift是Apache软件基金会的一个开源项目,它提供了一个软件框架,用于进行可扩展且跨语言的服务的开发。Thrift允许你定义和创建跨语言的服务,这些服务可以高效地进行数据交换和通信。
以下是Thrift的一些关键特性:
1.跨语言支持:Thrift支持多种编程语言,包括但不限于C++、Java、Python、PHP、Ruby、Erlang、Perl、Go、JavaScript、C#、Haskell等。
2.定义语言中立的接口:使用Thrift IDL(接口定义语言),可以定义数据类型和方法,这些定义与特定编程语言无关。
3.代码生成:Thrift编译器可以从IDL文件生成服务接口代码和数据访问层代码,减少了手动编写网络通信代码的工作。
4.高效的数据交换格式:Thrift定义了一种二进制交换格式,用于在网络中高效地序列化和反序列化数据。
5.支持多种通信协议:Thrift支持多种通信协议,如HTTP、AMQP、MQTT等。
6.支持多种数据传输方式:包括同步和异步通信,以及帧和非帧传输。
7.服务发现:Thrift可以与服务发现工具集成,以支持动态服务注册和发现。
8.安全性:支持SSL/TLS加密传输,以及认证和授权机制。
9.可扩展性:Thrift服务可以设计为高度可扩展的,以处理大量并发请求。
10.灵活的部署:可以部署为独立的服务,也可以嵌入到现有的应用程序中。
11.社区和支持:作为一个Apache项目,Thrift拥有一个活跃的社区,提供大量的文档、教程和工具。
Thrift适用于需要高性能、跨语言服务开发的场景,如微服务架构、分布式系统、Web服务等。使用Thrift,开发者可以专注于业务逻辑的实现,而不必担心底层的网络通信细节。

一、移植步骤

1.预备工作

检查编译器的版本信息。

root@localhost:~# g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch64-linux-gnu/7/lto-wrapper
Target: aarch64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 7.5.0-3ubuntu1~18.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=aarch64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-multiarch --enable-fix-cortex-a53-843419 --disable-werror --enable-checking=release --build=aarch64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu
Thread model: posix
gcc version 7.5.0 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04)

2.设置时间

注意这里要进行设置时间同步的操作,确保在解压缩的时候不会出现来自未来的文件的报错选项。

root@localhost:/mnt# date
Sun Jun 30 09:35:18 CST 2024

3.设置交换分区

查看交换分区的情况。

root@localhost:/mnt# swapon  /swap
swapon: /swap: insecure permissions 0644, 0600 suggested.
root@localhost:/mnt# free -lh
              total        used        free      shared  buff/cache   available
Mem:           1.6G        141M        1.2G         80M        261M        1.2G
Low:           1.6G        402M        1.2G
High:            0B          0B          0B
Swap:          1.0G          0B        1.0G

4.确保板卡可以访问网络资源

root@localhost:/mnt# ping www.baidu.com
PING www.a.shifen.com (183.2.172.42) 56(84) bytes of data.
64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=1 ttl=48 time=41.9 ms
64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=2 ttl=48 time=42.7 ms
64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=3 ttl=48 time=42.3 ms
64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=4 ttl=48 time=42.3 ms
64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=5 ttl=48 time=41.9 ms
64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=6 ttl=48 time=42.4 ms
64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=7 ttl=48 time=42.1 ms
^C
--- www.a.shifen.com ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6010ms
rtt min/avg/max/mdev = 41.904/42.279/42.734/0.298 ms

5.离线安装C++的boost扩展库

下载压缩包,我这里下载的boost库的版本为1.79.0,然后进行解压缩安装。

tar -vxjf boost_1_79_0.tar.bz2
cd boost_1_79_0
./bootstrap.sh
 ./b2
./b2 install

等待安装完成,cd /usr/local/lib,会出现以下信息。

root@localhost:/usr/local/lib# ls
cmake                          libboost_nowide.so
libboost_atomic.a              libboost_nowide.so.1.79.0
libboost_atomic.so             libboost_prg_exec_monitor.a
libboost_atomic.so.1.79.0      libboost_prg_exec_monitor.so
libboost_chrono.a              libboost_prg_exec_monitor.so.1.79.0
libboost_chrono.so             libboost_program_options.a
libboost_chrono.so.1.79.0      libboost_program_options.so
libboost_container.a           libboost_program_options.so.1.79.0
libboost_container.so          libboost_random.a
libboost_container.so.1.79.0   libboost_random.so
libboost_context.a             libboost_random.so.1.79.0
libboost_context.so            libboost_regex.a
libboost_context.so.1.79.0     libboost_regex.so
libboost_contract.a            libboost_regex.so.1.79.0
libboost_contract.so           libboost_serialization.a
libboost_contract.so.1.79.0    libboost_serialization.so
libboost_coroutine.a           libboost_serialization.so.1.79.0
libboost_coroutine.so          libboost_stacktrace_addr2line.a
libboost_coroutine.so.1.79.0   libboost_stacktrace_addr2line.so
libboost_date_time.a           libboost_stacktrace_addr2line.so.1.79.0
libboost_date_time.so          libboost_stacktrace_backtrace.a
libboost_date_time.so.1.79.0   libboost_stacktrace_backtrace.so
libboost_exception.a           libboost_stacktrace_backtrace.so.1.79.0
libboost_fiber.a               libboost_stacktrace_basic.a
libboost_fiber.so              libboost_stacktrace_basic.so
libboost_fiber.so.1.79.0       libboost_stacktrace_basic.so.1.79.0
libboost_filesystem.a          libboost_stacktrace_noop.a
libboost_filesystem.so         libboost_stacktrace_noop.so
libboost_filesystem.so.1.79.0  libboost_stacktrace_noop.so.1.79.0
libboost_graph.a               libboost_system.a
libboost_graph.so              libboost_system.so
libboost_graph.so.1.79.0       libboost_system.so.1.79.0
libboost_iostreams.a           libboost_test_exec_monitor.a
libboost_iostreams.so          libboost_thread.a
libboost_iostreams.so.1.79.0   libboost_thread.so
libboost_json.a                libboost_thread.so.1.79.0
libboost_json.so               libboost_timer.a
libboost_json.so.1.79.0        libboost_timer.so
libboost_locale.a              libboost_timer.so.1.79.0
libboost_locale.so             libboost_type_erasure.a
libboost_locale.so.1.79.0      libboost_type_erasure.so
libboost_log.a                 libboost_type_erasure.so.1.79.0
libboost_log.so                libboost_unit_test_framework.a
libboost_log.so.1.79.0         libboost_unit_test_framework.so
libboost_log_setup.a           libboost_unit_test_framework.so.1.79.0
libboost_log_setup.so          libboost_wave.a
libboost_log_setup.so.1.79.0   libboost_wave.so
libboost_math_c99.a            libboost_wave.so.1.79.0
libboost_math_c99.so           libboost_wserialization.a
libboost_math_c99.so.1.79.0    libboost_wserialization.so
libboost_math_c99f.a           libboost_wserialization.so.1.79.0
libboost_math_c99f.so          libthrift-0.13.0.so
libboost_math_c99f.so.1.79.0   libthrift.a
libboost_math_c99l.a           libthrift.la
libboost_math_c99l.so          libthrift.so
libboost_math_c99l.so.1.79.0   libthriftnb-0.13.0.so
libboost_math_tr1.a            libthriftnb.a
libboost_math_tr1.so           libthriftnb.la
libboost_math_tr1.so.1.79.0    libthriftnb.so
libboost_math_tr1f.a           libthriftz-0.13.0.so
libboost_math_tr1f.so          libthriftz.a
libboost_math_tr1f.so.1.79.0   libthriftz.la
libboost_math_tr1l.a           libthriftz.so
libboost_math_tr1l.so          pkgconfig
libboost_math_tr1l.so.1.79.0   python2.7
libboost_nowide.a              python3.6

6.离线安装thrift服务

下载thrift的安装包,进行解压缩并安装。

tar -vxzf thrift-0.13.0.tar.gz
cd thrift-0.13.0
./bootstrap.sh
./configure 
make
make install

安装完成之后可以在下面查看版本信息。

7.查看版本信息

root@localhost:/mnt# thrift --version
Thrift version 0.13.0

8.编译一个cpp的测试程序进行测试服务是否可用

服务器端。

root@localhost:~/thrift-0.13.0/tutorial/cpp# ./TutorialServer
Starting the server...
Incoming connection
        
ping()
add(1, 1)
calculate(1, Work(num1=1, num2=0, op=DIVIDE, comment=<null>))
calculate(1, Work(num1=15, num2=10, op=SUBTRACT, comment=<null>))
getStruct(1)

客户端。

root@localhost:~/thrift-0.13.0/tutorial/cpp# ./TutorialClient
ping()
1 + 1 = 2
InvalidOperation: Cannot divide by 0
15 - 10 = 5
Received log: SharedStruct(key=1, value=5)

总结

以上就是在arm64芯片上移植thrift跨语言框架的全部内容。具体在使用时可以使用thrift -gen 语言类型 user.thrift来生成用户所需要的代码文件。

标签:芯片,so.1,math,so,ARM64,--,79.0,libboost,thrift
From: https://blog.csdn.net/weixin_42554470/article/details/139838036

相关文章

  • 使用coremark测试芯片的性能
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、coremark是什么?二、使用步骤1.下载地址2.本次测试的芯片是一款arm64位的处理器总结前言在进行芯片选型和性能评估的过程中,coremark可以帮助我们初步估计芯片的整体性能。一、corema......
  • LM2733YMF/NOPB 封装 SOT23-5 丝印S52B DC-DC电源芯片
    LM2733YMF/NOPB规格信息:制造商:TexasInstruments产品种类:开关稳压器RoHS:是安装风格:SMD/SMT封装/箱体:SOT-23-5输出电压:3Vto40V输出电流:1.5A输出端数量:1Output最大输入电压:14V拓扑结构:Boost开关频率:600kHz最小工作温度:-40C最大工作温度:+......
  • stm32用spi开发W25Q128(Flash闪存芯片)
    前提提要spi概念目录stm32用spi开发W25Q128(Flash闪存芯片)开发流程W25Q128(Flash闪存芯片)介绍内存分布引脚说明指令介绍(1) 写使能指令0x06(2) 读状态寄存器0x35(3) 写失能指令0x04(4) 擦除扇区指令0x20(5) 读取厂商和设备ID0x90代码stm32用spi开发W25Q128(Flash闪存芯片)开发......
  • 最新版康泰克完整版- Kontakt v7.10.5 for Win和Mac,支持m芯片和intel,有入库工具
    一。世界最受欢迎的采样器的新篇章    NativeInstrumentsKontakt是采样器领域的标准,您将获得高质量的滤波器,在这里您将找到经典的模拟电路和最现代的滤波器。每一个都可以根据您的口味进行定制,并且由于它,您可以获得前所未有的声音。这是一个解锁版本,这意味着您可以......
  • 全网最最实用--基于Mac ARM 芯片实现操作系统MIT 6.S081-lab3
    文章目录实验三页表一、代码理解1.对于内存布局定义的理解2.对虚拟内存的理解3.对分配和释放物理内存的理解--删除或者分配物理内存为啥不需更改相应的页表?二、Printapagetable1.题目描述2.题目思考3.提交实验三、Akernelpagetableperprocess1.题目描述2.题目......
  • 电子充气泵芯片软件方案
    电子充气泵芯片软件方案的开发中,选择一个主控芯片是非常重要。芯片的性能和特性将直接影响到打气泵的充气效率、精度和稳定性。通常如果是针对电子充气泵应用,我们可以选择高性能的MCU(MicrocontrollerUnit)芯片或专用的充气控制芯片。这些芯片具备较高的计算能力和外设资源,能够......
  • (海川)代理 SM5402 ESOP8 1A 锂电池电源管理芯片
    产品描述SM5402是一款集成锂电池充电管理,LED指示功能,升压转换器的移动电源管理芯片,外围只需极少的元件,就可以组成功能强大的移动电源方案。SM5402内部集成了1A的线性充电模式,支持对0V电池充电;具有涓流/恒流/恒压三种模式充电,恒定电压4.20V(......
  • (海川)代理 SM5202 ESOP8/EMSOP8/DFN2X2‐8L 12V 耐压防反接及 OVP 功能 1A 锂电池线性
    产品描述    SM5202是一款完整的采用恒定电流/恒定电压的单节锂电池线性充电器,并带有锂电池正负极反接保护功能,可以保护芯片和用户安全。    由于采用了内部PMOSFET架构,加上防倒充电路,所以不需要外部检测电阻和隔离二极管。热反馈可对充电电流进......
  • 中移铁通智能插座:基于乐鑫 ESP8266 WiFi 芯片的可 DIY 智能插座(附源码)
    文末有视频演示第一部分1.简介中移铁通智能插座(型号:CMPOWERW1)基于乐鑫ESP8266WiFi芯片设计。由于早已没有官方APP支持,于是重新开发一版固件适配该硬件基本功能。固件基于乐鑫ESP8266_RTOS_SDK开发,通信协议采用MQTT-TCP方式控制插座的两个继电器。其......
  • CentOS 7.9 arm64架构配置在线yum源 —— 筑梦之路
    阿里云源cat<CentOS-aliyun.repo<<'EOF'#CentOS-Base.repo##ThemirrorsystemusestheconnectingIPaddressoftheclientandthe#updatestatusofeachmirrortopickmirrorsthatareupdatedtoand#geographicallyclosetothecli......