开发者
资源
在centos7.6和openEuler20.03环境下进行sigar-lib.jar编译
在centos7.6和openEuler20.03环境下进行sigar-lib.jar编译
新人帖
发表于2023/08/28
5323

     测试环境:centos7.6和openEuler20.03

  1. 扫描依赖包

    当我们不知道java项目是否包含native依赖的时候,可以使用工具扫描整个war或者jar包。

    鲲鹏代码迁移工具:https://www.hikunpeng.com/developer/devkit/porting-advisor

    以下是扫描结果:

  2. 分析扫描结果

    sigar-lib-1.6.4.jar包调用了native的动态库libsigar-x86-linux.so,且该动态库未在已有的白名单里,故不能通过工具直接下载,需要手动编译。

  3. 编译libsigar-aarch64-linux.so

    1. 安装依赖

      yum install -y wget gcc gcc-c++ make cmake libtool autoconf automake ant unzip java-1.8.0-openjdk java-1.8.0-openjdk-devel maven 

    2. 下载源码并解压      

             #下载 

             wget https://github.com/hyperic/sigar/archive/refs/tags/sigar-1.6.4.tar.gz 

            #解压 

            tar zxvf sigar-1.6.4.tar.gz 

         3.编译   

          #进入工程目录 

          cd sigar-sigar-1.6.4/bindings/java/  

          #修改ArchNameTask.java 79行-m64为-mabi=lp64 

          vi ./hyperic_jni/src/org/hyperic/jni/ArchNameTask.java 

    image.png

    #在openEuler操作系统中,需在linux_sigar.c文件中引入头文件sys/sysmacros.h 

    cd ../../src/os/linux/linux_sigar.c 

    songxwmt-1.jpg

    image.png

    image.png

  4. 编译sigar-lib-1.6.4.jar

    #下载 

    wget https://github.com/gridkit/sigar-lib/archive/sigar-lib-1.6.4.tar.gz 

    #解压 

    tar zxvf sigar-lib-1.6.4.tar.gz 

    #进入工程目录 

    cd sigar-lib-sigar-lib-1.6.4/ 

    #拷贝libsigar-aarch64-linux.so 

    cp /root/dev/sigar-sigar-1.6.4/bindings/java/sigar-bin/lib/libsigar-aarch64-linux.so  . 

    #编译 

    mvn package 

    songxwmt-2.jpg

  5. FAQ

    (1)[cc] gcc: 错误:unrecognized command line option ‘-m64’

    问题截图:

    songxwmt-3.jpg

    问题描述:鲲鹏平台不支持-m64编译选项

    解决思路:将鲲鹏平台对应的编译选项设置为-mabi=lp64

    (2)/root/dev/sigar-sigar-1.6.4/src/os/linux/linux_sigar.c:1148:22: 错误:called object ‘major’ is not a function or function pointer

    问题截图:

    songxwmt-4.jpg

    问题描述:

    进入sigar-sigar-1.6.4/src/os/linux/linux_sigar.c,查看1148和1149行代码,major和minor函数未找到,可能缺少头文件。

    1148 #define ST_MAJOR(sb) major((sb).st_rdev) 

    1149 #define ST_MINOR(sb) minor((sb).st_rdev) 

    解决思路:

    在系统头文件路径下搜索关键字major和minor,查看头文件名。

    grep -r "major(" /usr/include/ 

    grep -r "minor(" /usr/include/ 

    songxwmt-5.jpg

    将文件sigar-sigar-1.6.4/src/os/linux/linux_sigar.c中,引入头文件sys/sysmacros.h

    songxwmt-6.jpg

收藏举报
Level 1
0
帖子
0
粉丝
0
获赞