鲲鹏920(ARM64)移植javacpp续

本文详细描述了在ARM64架构物理机上移植javacpp和OpenCV的过程,涉及编译ffmpeg、opencv时遇到的gcc版本、依赖包配置以及错误修复,如cross-compile参数的修改、缺失模块的安装等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一篇文章 鲲鹏920(ARM64)移植javacpp中,我们成功编译了javacpp的子模块ffmpeg生成了.jar文件和ffmpeg动态库。

今天我们继续编译javacpp/opencv

二. 编译OpenCV

修改opencv/cppbuild.sh 中 linux-arm64)标签下的项目。
我们是在arm64物理机上进行的编译操作,并不是交叉编译环境,所以需要修改/删除cross 交叉编译相关的参数

aarch64-linux-gnu-gcc  =>  gcc
aarch64-linux-gnu-g++  =>  g++

删除 --cross-compile-prefix之类的参数。

在javacpp项目里,对于依赖的第三方项目,总是喜欢源码编译安装。那就一个一个的修改。

当然,对于不需要的模块,就没必要去编译了,比如WEBP,可以通过添加参数-DWITH_WEBP=OFF排除掉。

cpython

cd cpython
mvn install --projects cpython
./cppbuild.sh -platform linux-arm64 install cpython

numpy

numpy是opencv 必须要依赖的包.

cd numpy
mvn clean install numpy -P javacpp-platform-linux-arm64
./cppbuild.sh -platform linux-arm64 install numpy

报错:

  File "/home/javacpp-presets-1.5.3/cpython/cppbuild/linux-arm64/lib/python3.7/ctypes/__init__.py", line 7, in <module>
    from _ctypes import Union, Structure, Array
ModuleNotFoundError: No module named '_ctypes'

解决:

yum install libffi-devel -y

openssl

报错:

 build command is : .
configuring OpenSSL version 1.1.1f (0x1010106fL) for linux-arm64
Using os-specific seed configuration
Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-egd] [sctp] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--config=FILE] os/compiler[:flags]

pick os/compiler from:

查看opencv/cppbuild.sh脚本,

 ./Configure $OS-$ARCH -fPIC no-shared   

这里的$OS-$ARCH 最终是被解析成 linux-arm64, 但实际上openssl针对aarch64平台,需要的参数是 :linux-aarch64

修改为:

    linux-arm64)
        CFLAGS="-march=armv8-a+crypto -mcpu=cortex-a57+crypto"
        cd ../$OPENSSL
        ./Configure linux-aarch64 -fPIC no-shared --prefix=$INSTALL_PATH/host
        make -s -j $MAKEJ
        make install_sw
        make distclean
      

.

opencv

cd javacpp-presets/
./cppbuild.sh -platform linux-arm64 install opencv

错误:

JAVA: Processing OpenCV modules: 25
/tmp/ccL5CDXQ.s: Assembler messages:
/tmp/ccL5CDXQ.s:69: Error: register number out of range 0 to 15 at operand 3 -- `smull v2.4s,v0.4h,v21.h[0]'
/tmp/ccL5CDXQ.s:75: Error: register number out of range 0 to 15 at operand 3 -- `smlal v2.4s,v7.4h,v20.h[0]'
/tmp/ccL5CDXQ.s:338: Error: register number out of range 0 to 15 at operand 3 -- `smlal v1.4s,v6.4h,v18.h[0]'
/tmp/ccL5CDXQ.s:341: Error: register number out of range 0 to 15 at operand 3 -- `smlal v0.4s,v5.4h,v18.h[0]'
make[2]: *** [3rdparty/libwebp/CMakeFiles/libwebp.dir/src/dsp/yuv_neon.c.o] Error 1
make[1]: *** [3rdparty/libwebp/CMakeFiles/libwebp.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs..


解决:

  • 升级版本到gcc-7.3及以上
  • 非要使用gcc-4.8.5的话,添加参数 -march=armv8-a
 -DCMAKE_CXX_FLAGS="-march=armv8-a" 

错误:

Can't locate IPC/Cmd.pm in @INC
Can't locate IPC/Cmd.pm in @INC (@INC contains: /home/javacpp-presets-1.5.9/ffmpeg/cppbuild/linux-arm64/openssl-3.1.0/util/perl /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 . /home/javacpp-presets-1.5.9/ffmpeg/cppbuild/linux-arm64/openssl-3.1.0/external/perl/Text-Template-1.56/lib) at /home/javacpp-presets-1.5.9/ffmpeg/cppbuild/linux-arm64/openssl-3.1.0/util/perl/OpenSSL/config.pm line 19.
BEGIN failed--compilation aborted at /home/javacpp-presets-1.5.9/ffmpeg/cppbuild/linux-arm64/openssl-3.1.0/util/perl/OpenSSL/config.pm line 19.
Compilation failed in require at ./Configure line 23.

报错原因:缺少IPC/Cmd.pm模块
https://blog.csdn.net/sd4493091/article/details/122220902

解决:

yum -y install perl-IPC-Cmd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lcyw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值