提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
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