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

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


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来生成用户所需要的代码文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值