zoukankan      html  css  js  c++  java
  • 编译 jpcap 运行在 aarch64平台生成 libjpcap.so 文件

    转载自 https://www.codeleading.com/article/96645490172/
    使用环境 java 通过 jni 方式调用 jpcap

    因为这玩意10年未更新,编译好的 so 只能在 x86 环境使用,对于arm平台无法直接使用

    下载源码 https://github.com/ioleary/jpcap-0.7

    编译目录 jpcap-0.7-master/src/c

    依赖 libpcap-devel java-1.8.0-openjdk java-1.8.0-openjdk-devel

    依赖包直接通过软件源下载 yum install libpcap-devel java-1.8.0-openjdk java-1.8.0-openjdk-devel

    debian 或 ubuntu 环境使用 apt-get install libpcap-devel java-1.8.0-openjdk java-1.8.0-openjdk-devel

    编译依赖,需要复制的文件 jni.h 等

    安装好openjdk之后访问目录 /usr/lib/jvm/java-1.8.0/include/ ,复制 jni.h 到 /usr/include/ 目录下

    另外还需要复制 /usr/lib/jvm/java-1.8.0/include/linux/jni_md.h 到 /usr/include/ 目录下,另外一个 jawt_md.h 可以不用复制

    然后修改文件 jpcap-0.7-master/src/c/Makefile 增加 -fPIC 参数

    all: libjpcap.so
     
    libjpcap.so: JpcapCaptor.c JpcapSender.c JpcapWriter.c
                 packet_arp.c packet_datalink.c packet_icmp.c packet_ip.c
                 packet_ipv6.c packet_tcp.c packet_udp.c 
                    $(CC) $(COMPILE_OPTION) -fPIC -I$(JNI_INCLUDE) -I$(JNI_INCLUDE2)
                     -I$(PCAP_INCLUDE)
                    JpcapCaptor.c JpcapSender.c JpcapWriter.c
              packet_arp.c packet_datalink.c packet_icmp.c packet_ip.c
              packet_ipv6.c packet_tcp.c packet_udp.c
                    -o libjpcap$(SUFFIX) -lpcap
    clean:
                    -rm libjpcap$(SUFFIX)
    

    这里修改完成后就可以执行命令:make

    然后一堆 warning 提示,可以不管,当前目录下就可以看到 libjpcap.so 文件了

    验证:readelf -h libjpcap.so (没有这个命令就自己yum安装)

    [root@localhost c]# readelf -h libjpcap.so 
    ELF Header:
      Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
      Class:                             ELF64
      Data:                              2's complement, little endian
      Version:                           1 (current)
      OS/ABI:                            UNIX - System V
      ABI Version:                       0
      Type:                              DYN (Shared object file)
      Machine:                           AArch64
      Version:                           0x1
      Entry point address:               0x3270
      Start of program headers:          64 (bytes into file)
      Start of section headers:          76264 (bytes into file)
      Flags:                             0x0
      Size of this header:               64 (bytes)
      Size of program headers:           56 (bytes)
      Number of program headers:         7
      Size of section headers:           64 (bytes)
      Number of section headers:         29
      Section header string table index: 28
    

    上面命令执行后就可以看到我们要的 ELF64,机器是 AArch64 (我的设备是 arm cpu)

    然后就是 运行你的 java 代码测试 jpcap 功能了
    命令参数 参考文章:https://blog.csdn.net/wsmnbzbraw333/article/details/83972612

    本人水平有限,还在不断学习中 难免有很多错误或者遗漏,望见谅
  • 相关阅读:
    shell 统计行数
    sqlldr errors
    sqlldr 远程数据库
    load Properties
    查看shell 版本
    linux中的网络通信指令
    给EditText的drawableRight属性的图片设置点击事件
    p2p网贷3种运营模式
    p2p网贷3种运营模式
    linux常用的压缩与解压缩命令
  • 原文地址:https://www.cnblogs.com/faberbeta/p/15397433.html
Copyright © 2011-2022 走看看