树莓派3B+运行Java程序调用jnetpcap遇UnsatisfiedLinkError求助
解决树莓派ARM架构下jnetpcap的
UnsatisfiedLinkError问题 老哥,你碰到的这个java.lang.UnsatisfiedLinkError确实是踩了架构不兼容的坑——树莓派3B+是ARMv7架构,而你当前用的jnetpcap共享库(.so文件)是x86版本的,自然没法在ARM设备上加载。下面给你几个靠谱的解决思路:
1. 先找找有没有现成的ARM预编译包
首先可以去jnetpcap的官方代码仓库翻一翻,看看有没有社区大佬贡献的ARM架构预编译库。不过说实话,官方通常只提供x86/x86_64的版本,所以大概率还是得自己动手编译。
2. 手动编译适配ARM的jnetpcap库
这是最稳妥的方案,毕竟自己编译的肯定适配你的树莓派。步骤如下:
- 先搭好编译环境:在树莓派终端里安装必要的依赖工具:
为啥选OpenJDK 8?因为jnetpcap对新版本JDK的兼容性一般,树莓派上用8版本最稳。sudo apt-get update && sudo apt-get install build-essential libpcap-dev openjdk-8-jdk git - 拉取jnetpcap源码:
git clone https://github.com/jnetpcap/jnetpcap.git - 开始编译:进入源码目录,执行编译命令:
要是编译过程中报错,先检查是不是依赖没装全——比如提示找不到pcap,那就是cd jnetpcap ./configure --prefix=/usr/local make sudo make installlibpcap-dev没装对。实在卡壳可以看看源码里的README,里面有编译的细节提示。 - 配置Java项目:编译完成后,生成的
libjnetpcap.so会被安装到/usr/local/lib目录下。你可以把它复制到自己Java项目的库路径里,或者运行程序时用参数指定库位置:java -Djava.library.path=/usr/local/lib -jar 你的程序.jar
3. 实在搞不定?换个兼容ARM的替代库
要是编译jnetpcap实在折腾,也可以考虑换用pcap4j这类抓包库。它要么是纯Java实现,要么对ARM架构的支持更好,不需要折腾本地库的适配问题,省不少心。
内容的提问来源于stack exchange,提问作者Nfernandez
相关产品推荐
相关产品推荐

