CICFlowMeter错误org.jnetpcap.Pcap.<clinit>(Unknown Source)解决之aarch64架构linux下编译jnetpcap

记录原因

自己比较懒吧,很少写博客,但一些令人印象深刻的问题总是还是得记录,不然对不起浪费的时间。网上确实有许多解决方案,但试了都不行。

下面是我遇到的错误,在x86架构的机器下很容易就能解决,而在arm linux下,怎么重装libpcap,安装各种jdk的版本都解决不了。

oot@ka-FT-2000-4:/Integ/SJ/featureExtraction/CICFlowMeter-4.0/bin# ./cfm /Integ/pcapsource/d1/1_00001_20210104112753.pcap ./
cic.cs.unb.ca.ifm.Cmd You select: /Integ/pcapsource/d1/1_00001_20210104112753.pcap
cic.cs.unb.ca.ifm.Cmd Out folder: ./
cic.cs.unb.ca.ifm.Cmd CICFlowMeter received 1 pcap file
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.slytechs.library.NativeLibrary.dlopen(Ljava/lang/String;)J
        at com.slytechs.library.NativeLibrary.dlopen(Native Method)
        at com.slytechs.library.NativeLibrary.<init>(Unknown Source)
        at com.slytechs.library.JNILibrary.<init>(Unknown Source)
        at com.slytechs.library.JNILibrary.loadLibrary(Unknown Source)
        at com.slytechs.library.JNILibrary.register(Unknown Source)
        at com.slytechs.library.JNILibrary.register(Unknown Source)
        at com.slytechs.library.JNILibrary.register(Unknown Source)
        at org.jnetpcap.Pcap.<clinit>(Unknown Source)
        at cic.cs.unb.ca.jnetpcap.PacketReader.config(PacketReader.java:58)
        at cic.cs.unb.ca.jnetpcap.PacketReader.<init>(PacketReader.java:52)
        at cic.cs.unb.ca.ifm.Cmd.readPcapFile(Cmd.java:128)
        at cic.cs.unb.ca.ifm.Cmd.main(Cmd.java:80)

为了验证该错误是不是这两个so文件造成的,我将x86下的linux 的libjnetpcap-pcap100.so 和libjnetpcap.so 都删除,运行CICFlowMeter会出现同样的错误,果然是不同架构下的so文件不兼容造成的(其实也显而易见)。

重新编译jnetpcap

编译环境:银河麒麟V10, aarch64架构
网上很容易下载到jnetpcap的包,但是却没有arm64架构的编译好的so,于是下载源码包自己编译。下面是遇到的问题解决,整个流程耗时6个多小时:

  1. 下载jnetpcap-src-1.4.r1425-1.zip并解压:
    解压的文件
  2. 安装ant, 命令大概是:
    sudo apt install ant
  3. 编译,问题1,xml:119: taskdef class org . vafer.jdeb . ant DebAntTask cannot be found using the classloader AntclassL oader[ ]
    问题1
    方法:直接将build.xml第119行删除,不是debian系统。
  4. 编译,问题2,use aresiurce collection to copy directories.
    问题2根据提示,xml的611行有问题,直接找到你系统的libpcap.so的路径,填入xml:
    问题行
    解决方法
  5. 编译,问题3,网上的答案都说是xml的问题,但在这里其实是少了cpptask.jar的原因。
Problem: failed to create task or type cc
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.

问题3
解决办法:下载cpptasks-1.0b4.jar,放到jnetpcap的lib文件夹下。
这里的具体cpptasks.jar的版本需要你查看xml文件,放的路径也是要看xml,直接在xml中搜索cpptask相信你能找到线索的。
ps:我这里是放的路径是[项目路径]/cpptasks-1.0b4/cpptasks.jar
6. 编译,问题四,

<C ommand- line>:0: 19: error: token “”is not valid in preprocessor expressions/home/ka/ jnetpcap-src-1.4.1425-1/src/c/jnetpcap_pcap100.cpp:87:6: note: in expansion of macro ' L IBPCAP_ VERSION '
#if (L IBPCAP VERSION < L IBPCAP PCAP CREATE )

问题四
解决,明显是找不到LIBPCAP_VERSION,即libpcap的版本号没有,我们编辑Linux.properties文件,添加如下行
complier.LIBPCAP_VERSION = 174(具体版本可用apt list|grep libpcap获取,填个很大的数就行),这里一定是一个数字,不能像1.7.4这样。
在这里插入图片描述
7. 问题五,


    [javac] 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
    [javac] 注: 某些输入文件使用了未经检查或不安全的操作。
    [javac] 注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
    [javac] 78 个错误

BUILD FAILED
/home/ka/jnetpcap-src-1.4.r1425-1/build.xml:1090: Compile failed; see the compiler error output for details.
        at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:1181)
        at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:936)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.Target.execute(Target.java:435)
        at org.apache.tools.ant.Target.performTasks(Target.java:456)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1405)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1376)
        at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1260)
        at org.apache.tools.ant.Main.runBuild(Main.java:853)
        at org.apache.tools.ant.Main.startAnt(Main.java:235)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:285)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:112)

在这里插入图片描述
这个问题可能是我没有下载正确版本的cpptask的原因,要根据build.xml里的要求来下载。
但是检查./build/obj/我已经得到了我们想要的so文件,
大功告成
程序终于跑起来了!!!!!!!

在这里插入图片描述

附编译好的文件链接

https://download.csdn.net/download/lizheng2017/46217421

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值