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

    本人水平有限,还在不断学习中 难免有很多错误或者遗漏,望见谅
  • 相关阅读:
    dotnet core 获取 MacAddress 地址方法
    dotnet core 获取 MacAddress 地址方法
    dotnet core 发布只带必要的依赖文件
    dotnet core 发布只带必要的依赖文件
    Developing Universal Windows Apps 开发UWA应用 问答
    Developing Universal Windows Apps 开发UWA应用 问答
    cmd 如何跨驱动器移动文件夹
    cmd 如何跨驱动器移动文件夹
    C++ 驱动开发 error LNK2019
    C++ 驱动开发 error LNK2019
  • 原文地址:https://www.cnblogs.com/faberbeta/p/15397433.html
Copyright © 2011-2022 走看看