鲲鹏920(ARM64)移植javacpp续

news/2024/7/10 18:55:51 标签: ffmpeg, javacv

在上一篇文章 鲲鹏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

http://www.niftyadmin.cn/n/5040024.html

相关文章

HTML5+CSS3+JS小实例:鼠标控制飞机的飞行方向

实例:鼠标控制飞机的飞行方向 技术栈:HTML+CSS+JS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" conten…

普通卷积、转置卷积详细介绍以及用法

转置卷积&#xff08;普通卷积、转置卷积详细介绍以及用法 1、普通卷积操作2、转置卷积2.1 Pytorch转置卷积实验 1、普通卷积操作 首先回顾下普通卷积&#xff0c;下图以stride1&#xff0c;padding0&#xff0c;kernel_size3为例&#xff0c;假设输入特征图大小是4x4的&#…

前后端分离vue简介

vue简介 vue是一个渐进式js框架&#xff0c;用于构建用户界面&#xff0c;其主要特点是易学易用、轻量、灵活和高效。Vue.js由前Google工程师尤雨溪&#xff08; Evan You&#xff09;在2014年创建&#xff0c;它的核心库只关注视图层&#xff0c;是一款非常优秀的MVVM框架&…

支付宝开发问题:很抱歉,系统监测到你的支付宝账号有异常,入驻失败,如需帮助请拨打热线

想开发个支付宝小程序&#xff0c;结果困难重重啊 妹的&#xff0c;这一个星期一直都被这个问题困扰&#xff0c;找了一个个体户资质&#xff0c;一直失败&#xff0c;专门去注册了一个公司&#xff0c;还是提交失败。 给支付宝客服打电话&#xff0c;跟没打一样&#xff0c;…

iframe下的qiankun微前端,通过window.top.postMessage无法通信问题

背景 如题&#xff1a;iframe下的qiankun微前端&#xff0c;通过window.top.postMessage无法通信问题 因为一些必要原因需要通信&#xff0c;比如解决跨域window.open 解决办法 微前端内部通过window?.proxy?.parent?.postMessage跨域通信 qiankun官方文档提到&#xff…

mac怎么把两张图片拼在一起

mac怎么把两张图片拼在一起&#xff1f;在如今的生活中&#xff0c;喜欢摄影的朋友们越来越多。拍照已经成为我们的一种习惯&#xff0c;因为当我们遇到美景或迷人的人物时&#xff0c;总是忍不住按下快门&#xff0c;将它们定格。随着时间的推移&#xff0c;我们渐渐发现自己的…

使用GPT训练中秋古诗写作讲解

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

SpringSecurity---PasswordEncoder

在实际开发中&#xff0c;为了数据安全性&#xff0c;在数据库中存放密码时不会存放原密码&#xff0c;而是会存放加密后的密码。而用户传入的参数是明文密码。此时必须使用密码解析器才能将加密密码与明文密码做比对。Spring Security中的密码解析器是PasswordEncoder。 Sprin…