测评 OrangePi KunPeng Pro走进高校

server/2024/9/24 0:15:40/

写在开头

非常感谢CSDN给予我本次参与OrangePi KunPeng Pro开发板的机会,让我感到非常幸运,因我一直深处高校授课,教研团队也多次给我提及要深入了解学习KunPeng套件,下学期即将开设openEuler、openGauss、及鲲鹏平台下程序设计课程,这次开发板刚好包含以上内容,让我感觉热血沸腾,感谢之情,难以溢于言表。

引言

Orange Kunpeng Pro是香橙派Kunpeng Pro,一款专为高校教育和研究量身定制的高性能开发板。它以华为鲲鹏处理器为核心,为高校师生提供了一个功能强大、扩展性强的实验和研究平台。这款开发板的引入,旨在促进计算机科学与技术、嵌入式系统、物联网、人工智能等领域的教学和研究工作,为学生和教师提供实践和创新的机会。
OrangePI Kunpeng Pro在高校领域展示了自己的教育价值和学术潜力,为高校师生提供了一个促进教学和研究发展的强大工具:

  1. 教学支持:作为教学辅助工具,OrangePI Kunpeng Pro能够支持计算机系统能力课程设计,帮助学生更好地理解硬件与软件的协同工作原理。
  2. 实践平台:提供真实的开发环境,让学生能够在项目中实践理论知识,从服务器课程创新到云计算、边缘计算、嵌入式课程创新,覆盖多个技术层面。
  3. 研究与创新:为教师和研究生提供强大的计算能力和丰富的接口,支持复杂的研究项目和前沿技术探索,特别是在物联网和AI领域。
  4. 开源生态:鼓励学生参与到开源项目中来,通过OrangePI Kunpeng Pro提供的开源工具和资源,培养他们的创新精神和团队协作能力。
  5. 经济高效:OrangePI Kunpeng Pro的高性价比使其成为高校在有限预算下的理想选择,为学生提供了一种负担得起的、高性能的学习和研究工具。

测评目的和背景

2.1 目的说明:

明确测评的目标,如评估OrangePi Kunpeng Pro在学术研究、教学实验、项目开发等方面的适用性和性能表现。

2.1.1 学术研究

  1. 计算密集型任务
    • 数据挖掘与分析:处理大规模数据集,进行复杂的数据分析任务。
    • 机器学习与深度学习:作为算法原型验证和模型训练的平台,支持AI研究的快速迭代。
  2. 高性能计算
    • 并行计算:利用多核处理器进行并行算法的开发和测试。
    • 分布式计算:在多个OrangePi Kunpeng Pro之间搭建集群,进行分布式系统的实验和研究。
  3. 边缘计算
    • 实时数据处理:在边缘节点进行数据的实时采集、处理和分析。
    • 物联网应用:作为物联网项目的核心处理单元,支持复杂的传感器数据处理。
  4. 网络安全与加密
    • 加密算法研究:利用硬件加速进行加密算法的实现和性能测试。
    • 网络安全实验:模拟网络攻击和防御,进行网络安全相关的研究。
  5. 图形处理与视觉计算
    • 图像和视频处理:进行图像识别、视频分析和增强等视觉计算任务。
    • 计算机视觉:为计算机视觉项目提供足够的计算能力和硬件加速。

2.1.2 教学实验

  1. 计算机科学与技术教育
    • 系统编程:教授操作系统、网络编程、多线程编程等课程。
    • 硬件接口教学:通过GPIO、UART、I2C、SPI等接口进行硬件编程教学。
  2. 人工智能与机器学习课程
    • AI算法实践:让学生通过实际操作来理解机器学习和深度学习算法。
    • 智能硬件项目:设计和实现智能机器人、自动驾驶小车等教学项目。
  3. 嵌入式系统教学
    • 嵌入式系统设计:教授基于ARM架构的嵌入式系统设计。
    • 实时系统开发:基于OrangePi Kunpeng Pro进行实时操作系统和应用程序的开发。
  4. 网络与通信课程
    • 网络协议实验:模拟和实现各种网络协议。
    • 无线通信教学:利用Wi-Fi和蓝牙模块进行无线通信实验。
  5. 综合项目实践
    • 课程设计:作为课程设计的平台,让学生综合应用所学知识。
    • 毕业设计:为学生提供强大的计算平台,进行高水平的毕业设计。
      :::warning
      OrangePi Kunpeng Pro不仅在于其高性能的硬件配置,还在于其开放性和可扩展性。它支持多种操作系统和开发工具,能够满足不同学术研究和教学实验的需求。当然,其相对较低的成本和易于使用的特性也使其成为高校师生理想的实验和教学平台。
      :::

2.2 背景介绍:

2.2.1 硬件配置:

  1. 处理器:搭载华为鲲鹏920处理器,具有4核64位处理器+AI处理器。
  2. 内存:支持DDR4内存,配备8GB或16GB可选,速率达到3200Mbps。
  3. 存储:支持多种存储解决方案,包括SATA接口和M.2接口2280,可用于安装SSD硬盘还具备eMMC插槽、TF卡槽。
  4. 扩展接口:提供PCIe x4插槽,可用于扩展显卡、网络卡等。
  5. 网络:通常配备千兆以太网接口,支持高速网络连接。
  6. 无线通信:包括Wi-Fi和蓝牙模块4.2,支持双频2.4G和5G无线网络连接。
  7. **有线通信:**1000Mbps以太网高速运转
  8. 显示输出:提供2个HDMI接口,支持高清视频输出。
  9. USB接口:提供多个USB接口,包括USB 3.0和USB 2.0。
  10. 其他接口:可能包括音频接口、GPIO针脚等。

2.2.2 特点:

  1. 国产处理器:采用华为自主研发的鲲鹏处理器,支持国内处理器生态系统的发展。
  2. 高性能计算:鲲鹏处理器具有高性能、低功耗的特点,适合进行高性能计算任务。
  3. 开放生态:支持多种操作系统,如Ubuntu、openEuler等,便于开发者进行系统开发和定制。
  4. 丰富的接口:提供多样的扩展接口,支持多种外设连接,灵活性高。
  5. 适用于教育与研究:由于其高度的可扩展性和开放的特性,非常适合高校和研究机构用于教学和科研。
  6. 适用于企业应用:可以作为服务器使用,适用于企业中的轻量级计算需求。
  7. 安全性:华为鲲鹏处理器在硬件层面提供了安全特性,有助于保障系统安全。
  8. 节能环保:低功耗设计有助于节约能源,减少碳排放。

开箱连接

连接电源线

1888127906.jpeg
1888127874.jpeg

查看路由器管理端

家用路由器

我这采用的路由器是HUAWEI-凌霄-EE-12W2的路由。

359983105.jpg
查看openEuler的ip地址
image.png

启动ssh

基于Xshell进行连接

连接系统三要素

  • ip地址 : 192.168.3.161
  • 用户名:openEuler/root
    • root 为超级管理员
    • openEuler为管理员
  • 密 码:openEuler

image.png
点击【连接】后,输入用户名:密码即可

配置wifi登录

省去每次都需要采用网线连接

  1. 扫描当前附近的wifi热点:
[root@openEuler ~]# nmcli dev wifi
  1. 连接wifi:
    1. wifiName
    2. wifiPassword
[root@openEuler ~]# sudo nmcli dev wifi connect wifiName password wifiPassword

连接:

[root@openEuler ~]# sudo nmcli dev wifi connect HUAWEI-凌霄-EE12W2 password mryang66188

查看WiFi连接的IP
359983105.jpg
-1089872857.jpg
-652163421.jpg

测评范围

针对OrangePi KunPeng Pro的与x86架构做横向对比

实验1: OrangePi KunPeng Pro 与x86在双精度浮点型转整型的差异

OrangePi KunPeng Pro

检查开发板中的编译器是否安装,openEuler 自带版本为 gcc10.3.1,符合本次实验要求。

分别输入命令 gcc – vg++ -v

[root@openEuler ~]$ gcc -v
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/aarch64-linux-gnu/10.3.1/lto-wrapper
目标:aarch64-linux-gnu
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,fortran,objc,obj-c++,lto --enable-plugin --enable-initfini-array --disable-libgcj --without-cloog --enable-gnu-indirect-function --build=aarch64-linux-gnu --with-stage1-ldflags=' -Wl,-z,relro,-z,now' --with-boot-ldflags=' -Wl,-z,relro,-z,now' --disable-bootstrap --without-isl --with-multilib-list=lp64 --enable-bolt
线程模型:posix
Supported LTO compression algorithms: zlib
gcc 版本 10.3.1 (GCC)
[opengauss@openEuler ~]$ g++ -v
使用内建 specs。
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/aarch64-linux-gnu/10.3.1/lto-wrapper
目标:aarch64-linux-gnu
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,fortran,objc,obj-c++,lto --enable-plugin --enable-initfini-array --disable-libgcj --without-cloog --enable-gnu-indirect-function --build=aarch64-linux-gnu --with-stage1-ldflags=' -Wl,-z,relro,-z,now' --with-boot-ldflags=' -Wl,-z,relro,-z,now' --disable-bootstrap --without-isl --with-multilib-list=lp64 --enable-bolt
线程模型:posix
Supported LTO compression algorithms: zlib
gcc 版本 10.3.1 (GCC) 

进行编码:

[openEuler@openEuler test]$ vim test.c
[openEuler@openEuler ~]$ mkdir test
[openEuler@openEuler ~]$ cd test/

image.png

# 执行编译
[openEuler@openEuler test]$ gcc -mabi=lp64 -march=armv8-a test.c
[openEuler@openEuler test]$ ll
总用量 20
-rwxrwxr-x 1 openEuler openEuler 70904  528 21:17 a.out
-rw-rw-r-- 1 openEuler openEuler   507  528 21:17 test.c

上述过程中,发现鲲鹏上生成可执行文件:a.out, 故说明编译成功

  • 执行命令 ./a.out,观察输出结果,如下所示

image.png

2.3.2 x86架构

为对比开发板的鲲鹏,特在阿里云购入x86的openEuler服务器,进行对比:

root@iZbp16djnvbt0u13pkrbckZ ~]# gcc -v
-bash: gcc: command not found
[root@iZbp16djnvbt0u13pkrbckZ ~]# yum install gcc  -y
...
Complete!
[root@iZbp16djnvbt0u13pkrbckZ ~]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/10.3.1/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,fortran,objc,obj-c++,lto --enable-plugin --enable-initfini-array --disable-libgcj --without-cloog --enable-gnu-indirect-function --build=x86_64-linux-gnu --with-stage1-ldflags=' -Wl,-z,relro,-z,now' --with-boot-ldflags=' -Wl,-z,relro,-z,now' --disable-bootstrap --without-isl --with-tune=generic --with-arch_32=x86-64 --disable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 10.3.1 (GCC) 
[root@iZbp16djnvbt0u13pkrbckZ ~]#  g++ -v
-bash: g++: command not found
[root@iZbp16djnvbt0u13pkrbckZ ~]# yum install g++  -y
...
Complete!
[root@iZbp16djnvbt0u13pkrbckZ ~]# g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/10.3.1/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,fortran,objc,obj-c++,lto --enable-plugin --enable-initfini-array --disable-libgcj --without-cloog --enable-gnu-indirect-function --build=x86_64-linux-gnu --with-stage1-ldflags=' -Wl,-z,relro,-z,now' --with-boot-ldflags=' -Wl,-z,relro,-z,now' --disable-bootstrap --without-isl --with-tune=generic --with-arch_32=x86-64 --disable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 10.3.1 (GCC) 
[root@iZbp16djnvbt0u13pkrbckZ ~]# 
[root@iZbp16djnvbt0u13pkrbckZ home]# mkdir test
[root@iZbp16djnvbt0u13pkrbckZ home]# cd test
[root@iZbp16djnvbt0u13pkrbckZ test]# vim test.c

image.png

[root@iZbp16djnvbt0u13pkrbckZ test]# gcc -ma64 test.c
gcc: error: unrecognized command-line option ‘-ma64’; did you mean ‘-m64’?
[root@iZbp16djnvbt0u13pkrbckZ test]# gcc -m64 test.c
[root@iZbp16djnvbt0u13pkrbckZ test]# ls
a.out  test.c
[root@iZbp16djnvbt0u13pkrbckZ test]# ./a.out 
test_long low = 0xffffffff
test_long high = 0x7ffffff
test_long long = 5764607523034234870.000000
9223372036854775807
-9223372036854775808
sizeof long = 8

结果对比:

CPUX86OrangePi KunPeng Pro
结果image.pngimage.png
结论:
  1. 两个大平台下,是两套 cpu 架构,其中算数逻辑单元的实现可能会有差异。
  2. 操作系统都是OpenEuler。
  • x86 指令集中浮点到整型的转换指令,定义了一 indefinite integer value—"不确定 数值 64bit:0x8000000000000000,大多数都遵循这个原则,但是在从 double 向无符号整型转换 时,又出现不同的结果,
  • OrangePi KunPeng Pro处理器处理非常清晰和简单,上溢和下溢时。保留整型能表示 的最大最小值。这样开发者不会面对不确定或无法预期的结果。
    | | |
    |

实验2: 关于动态 so 库的调用

测试在OrangePi KunPeng Pro平台下调用动态 so 库的试验 。在传统的x86架构下,是可以正常运作的,毕竟大多数电脑都是Intel,大家在日常开发中都已经使用N次,这里就不再进行测试,直接针对KunPeng架构测试是否能够正常运行

Calculate 为 Java 类,具体内容如下,进行四则运算然后打印结果, 但是现在加法和减法运算不是用 Java 代码完成,而是依赖了 C 动态库 libtest.so。另外此项目 是通过 maven 构建,后续 jar 包构建也将直接使用 mvn 命令 。
  • 安装Maven:
[openEuler@openEuler root]$ sudo dnf install maven  -y
Last metadata expiration check: 3:44:57 ago on 2024年05月28日 星期二 18时57分49秒.
Dependencies resolved.
=====================================================================================================================================Package                                          Architecture     Version                                 Repository           Size
=====================================================================================================================================
Installing:maven                                            noarch           1:3.6.3-2.oe2203sp3                     everything           10 k
Installing dependencies:aopalliance                                      noarch           1.0-19.oe2203sp3                        everything           14 kapache-commons-cli                               noarch           1.4-7.oe2203sp3                         everything           65 kapache-commons-codec                             noarch           1.11-6.oe2203sp3                        everything          276 kapache-commons-io                                noarch           1:2.6-8.oe2203sp3                       everything          207 kapache-commons-lang3                             noarch           3.9-3.oe2203sp3                         everything          469 kapache-commons-logging                           noarch           1.2-17.oe2203sp3                        everything           80 katinject                                         noarch           1-31.oe2203sp3                          everything           15 kcdi-api                                          noarch           1.2-10.oe2203sp3                        everything          139 kcglib                                            noarch           3.3.0-1.oe2203sp3                       everything          299 keasymock                                         noarch           3.6-1.oe2203sp3                         everything          144 kgeronimo-annotation                              noarch           1.0-26.oe2203sp3                        everything           21 kgoogle-guice                                     noarch           4.1-13.oe2203sp3                        everything          459 kguava20                                          noarch           20.0-11.oe2203sp3                       everything          2.7 Mhamcrest                                         noarch           1.3-25.oe2203sp3                        everything          122 khawtjni-runtime                                  noarch           1.16-4.oe2203sp3                        everything           35 khttpcomponents-client                            noarch           4.5.5-7.oe2203sp3                       everything          707 khttpcomponents-core                              noarch           4.4.15-1.oe2203sp3                      everything          1.4 Mjakarta-el-api                                   noarch           4.0.0-4.oe2203sp3                       everything          151 kjansi                                            noarch           1.17.1-2.oe2203sp3                      everything           74 kjansi-native                                     aarch64          1.7-8.oe2203sp3                         everything           69 kjava-1.8.0-openjdk                               aarch64          1:1.8.0.402.b06-0.oe2203sp3             update              407 kjava-1.8.0-openjdk-devel                         aarch64          1:1.8.0.402.b06-0.oe2203sp3             update              9.8 Mjava-1.8.0-openjdk-headless                      aarch64          1:1.8.0.402.b06-0.oe2203sp3             update               38 Mjavapackages-tools                               noarch           5.3.0-6.oe2203sp3                       everything           32 kjboss-interceptors-1.2-api                       noarch           1.0.1-1.oe2203sp3                       everything           52 kjcl-over-slf4j                                   noarch           1.7.25-8.oe2203sp3                      everything           22 kjsoup                                            noarch           1.14.2-2.oe2203sp3                      update              600 kjsr-305                                          noarch           3.0.2-1.oe2203sp3                       everything           30 kjunit                                            noarch           1:4.12-13.oe2203sp3                     everything          292 kmaven-lib                                        noarch           1:3.6.3-2.oe2203sp3                     everything          1.5 Mmaven-resolver-api                               noarch           1:1.1.1-4.oe2203sp3                     everything          131 kmaven-resolver-connector-basic                   noarch           1:1.1.1-4.oe2203sp3                     everything           48 kmaven-resolver-impl                              noarch           1:1.1.1-4.oe2203sp3                     everything          174 kmaven-resolver-spi                               noarch           1:1.1.1-4.oe2203sp3                     everything           38 kmaven-resolver-transport-wagon                   noarch           1:1.1.1-4.oe2203sp3                     everything           37 kmaven-resolver-util                              noarch           1:1.1.1-4.oe2203sp3                     everything          145 kmaven-shared-utils                               noarch           3.3.3-1.oe2203sp3                       everything          150 kmaven-wagon-file                                 noarch           3.1.0-3.oe2203sp3                       everything           19 kmaven-wagon-http                                 noarch           3.1.0-3.oe2203sp3                       everything           19 kmaven-wagon-http-shared                          noarch           3.1.0-3.oe2203sp3                       everything           41 kmaven-wagon-provider-api                         noarch           3.1.0-3.oe2203sp3                       everything           55 kobjectweb-asm                                    noarch           8.0.1-1.oe2203sp3                       everything          382 kobjenesis                                        noarch           2.6-4.oe2203sp3                         everything          213 kplexus-cipher                                    noarch           1.7-16.oe2203sp3                        everything           45 kplexus-classworlds                               noarch           2.5.2-10.oe2203sp3                      everything           59 kplexus-containers-component-annotations          noarch           1.7.1-7.oe2203sp3                       everything           12 kplexus-interpolation                             noarch           1.26-2.oe2203sp3                        everything           79 kplexus-sec-dispatcher                            noarch           1.4-26.oe2203sp3                        everything           60 kplexus-utils                                     noarch           3.3.0-1.oe2203sp3                       everything          254 kqdox                                             noarch           2.0-6.M9.oe2203sp3                      everything          290 ksisu-inject                                      noarch           1:0.3.3-5.oe2203sp3                     everything          865 kslf4j                                            noarch           1.7.25-8.oe2203sp3                      everything           68 kTransaction Summary
=====================================================================================================================================
Install  53 Packages
[WARNING] Replacing pre-existing project main-artifact file: /home/java_test/Calc/target/calculator-1.0-SNAPSHOT.jar
with assembly file: /home/java_test/Calc/target/calculator-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  11:49 min
[INFO] Finished at: 2024-05-28T23:02:20+08:00
[INFO] ------------------------------------------------------------------------
[root@openEuler Calc]# mvn clean package

image.png

[root@openEuler Calc]# ls
pom.xml  src  target

使用了 c/c++ 的动态库,需要设置环境变量具体步骤如下:

[root@openEuler Calc]# cd target/classes
[root@openEuler classes]# ls
com  libtest.so  test.c  test.h
[root@openEuler classes]# cp libtest.so  /usr/local/lib
[root@openEuler classes]# export LD_LIBRARY_PATH=/usr/local/lib

接下来回退一层,进入到target目录下进行运行程序

[root@openEuler classes]# pwd
/home/java_test/Calc/target/classes
[root@openEuler classes]# cd ..
[root@openEuler target]# ls
archive-tmp  calculator-1.0-SNAPSHOT.jar  classes  maven-archiver  maven-status
[root@openEuler target]# java -jar calculator-1.0-SNAPSHOT.jar
27.0
3.0
Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'test':
libtest.so: cannot open shared object file: No such file or directory
libtest.so: cannot open shared object file: No such file or directory
Can't obtain InputStream for linux-aarch64/libtest.soat com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:302)at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:455)at com.sun.jna.Library$Handler.<init>(Library.java:192)at com.sun.jna.Native.loadLibrary(Native.java:646)at com.sun.jna.Native.loadLibrary(Native.java:630)at com.mryang.Calculate$CLibrary.<clinit>(Calculate.java:17)at com.mryang.Calculate.add(Calculate.java:23)at com.mryang.Calculate.main(Calculate.java:11)Suppressed: java.lang.UnsatisfiedLinkError: libtest.so: cannot open shared object file: No such file or directoryat com.sun.jna.Native.open(Native Method)at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:191)... 7 moreSuppressed: java.lang.UnsatisfiedLinkError: libtest.so: cannot open shared object file: No such file or directoryat com.sun.jna.Native.open(Native Method)at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:204)... 7 moreSuppressed: java.io.IOException: Can't obtain InputStream for linux-aarch64/libtest.soat com.sun.jna.Native.extractFromResourcePath(Native.java:1115)at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:276)... 7 more
[root@openEuler target]# 

发现报错,所以就得需要重新再编译动态 so 库
:::warning
经过上述发现最初的 jar 包只能在安装了 64 位 jdk 的 X86 平台系统上运行,在openEuler系统上不能执行,有违Java最初初衷,”一次编译,到处运行“。 虽然 Java 可以跨平台运行,但是 C++动态库不能跨平台调用,本项目中的加减法实际上是调 用 C动态库完成的,而此 C动态库是在 x86 编译出的 libtest.so 文件,需要在OrangePi KunPeng Pro上使用其源码重新编译成 libtest.so 动态库,Java 才能正常调用它
:::
修复报错:

[root@openEuler target]# cd classes
[root@openEuler classes]# ls
com  libtest.so  test.c  test.h
[root@openEuler classes]# gcc test.c -fPIC -shared -o libtest.so
[root@openEuler classes]# # 到此。已经程序编译新的so库,覆盖原有的libtest.so
[root@openEuler classes]# cp libtest.so /usr/local/lib/
cp:是否覆盖'/usr/local/lib/libtest.so'? y
[root@openEuler classes]# export LD_LIBRARY_PATH=/usr/local/lib[root@openEuler classes]# pwd
/home/java_test/Calc/target/classes
[root@openEuler classes]# cd ../../
[root@openEuler Calc]# rm -rf target/
[root@openEuler Calc]# mvn clean package
...
[WARNING] Replacing pre-existing project main-artifact file: /home/java_test/Calc/target/calculator-1.0-SNAPSHOT.jar
with assembly file: /home/java_test/Calc/target/calculator-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.991 s
[INFO] Finished at: 2024-05-28T23:39:32+08:00
[INFO] ------------------------------------------------------------------------
[root@openEuler Calc]# ls
pom.xml  src  target
[root@openEuler Calc]# cd target/
[root@openEuler target]# ls
archive-tmp  calculator-1.0-SNAPSHOT.jar  classes  maven-archiver  maven-status
[root@openEuler target]# java -jar calculator-1.0-SNAPSHOT.jar
27.0
3.0
12
6
[root@openEuler target]# 

关于跨平台,个人是如下理解:
跨平台是指不依赖操作系统,不依赖硬件环境,具有跨平台性的程序能够在不同的平台上运行。

意见反馈:

说起香橙派,或许有些开发没有听过,害怕小众、不敢轻易接触,甚至不乏有些笔友会讨伐OrangePI的文档不够详尽或教程不够完善,但是当OrangePI与华为牵手那一刻,难道这不也算是华为企业已经帮众多开发者进行审视选择后的结果吗,我是一个资深华为粉,更加相信OrangePI在拥有华为诸多支持后必然会越来越好,加油!


http://www.ppmy.cn/server/45130.html

相关文章

kotlin基础之协程

Kotlin协程&#xff08;Coroutines&#xff09;是Kotlin提供的一种轻量级的线程模型&#xff0c;它允许我们以非阻塞的方式编写异步代码&#xff0c;而无需使用回调、线程或复杂的并发API。协程是一种用户态的轻量级线程&#xff0c;它可以在需要时挂起和恢复&#xff0c;从而有…

Springboot 实战运用

一&#xff0c;基本配置 1&#xff0c;pom文件配置介绍 1.1继承 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.2</version><relativePath/> <…

线程池在业务中的实践

文章目录 1. 业务背景 1. 业务背景 场景一&#xff1a; 快速响应用户请求 场景描述&#xff1a;比如说⽤户要查看⼀个商品的信息&#xff0c;那么我们需要将商品维度的⼀系列信息如商品的价格、优惠、库存、图⽚等等聚合起来&#xff0c;展示给⽤户。 分析&#xff1a;从用户角…

闲话 .NET(3):.NET Framework 的缺点

前言 2016 年&#xff0c;微软正式推出 .NET Core 1.0&#xff0c;并在 2019 年全面停止 .NET Framework 的更新。 .NET Core 并不是 .NET Framework 的升级版&#xff0c;而是一个从头开始开发的全新平台&#xff0c;一个跟 .NET Framework 截然不同的开源技术框架。 微软为…

【CSharp】判断目录以及文件是否存在

【CSharp】判断目录以及文件是否存在 1.背景2.判断目录3.判断文件1.背景 我们在进行磁盘IO的时候进行需要判断目录、文件是否存在,根据判断结果再做进一步的操作。 其中判断目录是否存在,涉及Directory.Exists(String) 方法; 命名空间:System.IO 方法功能:确定给定路径是…

假象和谎言

原创 | 刘教链 隔夜BTC&#xff08;比特币&#xff09;徘徊在69k一线。5.25教链内参报告&#xff0c;《BTC ETF持仓即将超越中本聪》。ETH ETF的尘嚣逐渐散去&#xff0c;复归于平静。戏刚唱了个开头&#xff0c;结尾还留着悬念。4000刀之于ETH看来是个关键阻力位&#xff0c;最…

数据迁移测试经验分享

以下为作者观点&#xff1a; 数据迁移&#xff0c;是在保证新旧系统业务连续性的前提下&#xff0c;将数据从旧数据库迁移到新数据库的过程&#xff0c;测试前通过迁移策略和方案了解新旧系统数据如何重构与关联&#xff0c;测试过程需确保数据迁移的正确性&#xff0c;主要体…

oracle11g rac 修改spfile

今天一套环境&#xff0c;发现2个节点的spfile不一致&#xff0c;正好有停机时间就修改spfile配置 SYSorcl1> show parameter spfile NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile …