首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为ARM交叉编译opencv项目并调用go项目gocv

为ARM交叉编译opencv项目并调用go项目gocv
EN

Stack Overflow用户
提问于 2021-12-19 05:25:28
回答 1查看 565关注 0票数 0

我在主机Ubuntu20.04.3LTS下为ARM编译了opencv和gocv,如下所示。

1. Apt安装arm-linux-gnueabi-gcc,arm-linux-gnueabi-g++

2.编译和安装opencv

代码语言:javascript
复制
cmake -DCMAKE_C_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabi-g++  -DCMAKE_TOOLCHAIN_FILE=../opencv/platforms/linux/arm-gnueabi.toolchain.cmake  ../opencv
make -j16
make install

安装后。在当前dir中创建了一个名为install的文件夹,并获得了如下共享库。

代码语言:javascript
复制
../arm2build/install/lib
|-- cmake
|   `-- opencv4
|       |-- OpenCVConfig-version.cmake
|       |-- OpenCVConfig.cmake
|       |-- OpenCVModules-release.cmake
|       `-- OpenCVModules.cmake
|-- libopencv_calib3d.so -> libopencv_calib3d.so.405
|-- libopencv_calib3d.so.4.5.4
|-- libopencv_calib3d.so.405 -> libopencv_calib3d.so.4.5.4
|-- libopencv_core.so -> libopencv_core.so.405
|-- libopencv_core.so.4.5.4
|-- libopencv_core.so.405 -> libopencv_core.so.4.5.4
|-- libopencv_dnn.so -> libopencv_dnn.so.405
|-- libopencv_dnn.so.4.5.4
|-- libopencv_dnn.so.405 -> libopencv_dnn.so.4.5.4
|-- libopencv_features2d.so -> libopencv_features2d.so.405
|-- libopencv_features2d.so.4.5.4
|-- libopencv_features2d.so.405 -> libopencv_features2d.so.4.5.4
|-- libopencv_flann.so -> libopencv_flann.so.405
|-- libopencv_flann.so.4.5.4
|-- libopencv_flann.so.405 -> libopencv_flann.so.4.5.4
|-- libopencv_gapi.so -> libopencv_gapi.so.405
|-- libopencv_gapi.so.4.5.4
|-- libopencv_gapi.so.405 -> libopencv_gapi.so.4.5.4
|-- libopencv_highgui.so -> libopencv_highgui.so.405
|-- libopencv_highgui.so.4.5.4
|-- libopencv_highgui.so.405 -> libopencv_highgui.so.4.5.4
|-- libopencv_imgcodecs.so -> libopencv_imgcodecs.so.405
|-- libopencv_imgcodecs.so.4.5.4
|-- libopencv_imgcodecs.so.405 -> libopencv_imgcodecs.so.4.5.4
|-- libopencv_imgproc.so -> libopencv_imgproc.so.405
|-- libopencv_imgproc.so.4.5.4
|-- libopencv_imgproc.so.405 -> libopencv_imgproc.so.4.5.4
|-- libopencv_ml.so -> libopencv_ml.so.405
|-- libopencv_ml.so.4.5.4
|-- libopencv_ml.so.405 -> libopencv_ml.so.4.5.4
|-- libopencv_objdetect.so -> libopencv_objdetect.so.405
|-- libopencv_objdetect.so.4.5.4
|-- libopencv_objdetect.so.405 -> libopencv_objdetect.so.4.5.4
|-- libopencv_photo.so -> libopencv_photo.so.405
|-- libopencv_photo.so.4.5.4
|-- libopencv_photo.so.405 -> libopencv_photo.so.4.5.4
|-- libopencv_stitching.so -> libopencv_stitching.so.405
|-- libopencv_stitching.so.4.5.4
|-- libopencv_stitching.so.405 -> libopencv_stitching.so.4.5.4
|-- libopencv_video.so -> libopencv_video.so.405
|-- libopencv_video.so.4.5.4
|-- libopencv_video.so.405 -> libopencv_video.so.4.5.4
|-- libopencv_videoio.so -> libopencv_videoio.so.405
|-- libopencv_videoio.so.4.5.4
`-- libopencv_videoio.so.405 -> libopencv_videoio.so.4.5.4

3.用cgo构建gocv/cmd/version项目

代码语言:javascript
复制
CGO_ENABLED=1 CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++ CGO_CPPFLAGS='-I/opt/arm2build/install/include/opencv4' CGO_LDFLAGS='-L/opt/arm2build/lib -lopencv_core -lopencv_videoio -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs -lopencv_objdetect -lopencv_features2d -lopencv_video -lopencv_dnn -lopencv_calib3d -lopencv_flann -lopencv_photo' GOOS=linux GOARCH=arm go build -tags=customenv .

做完之后会产生ELF

代码语言:javascript
复制
root@793d7120f9df:/opt/go/gocv/cmd/version# file version
version: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, BuildID[sha1]=038c80350b7a0c9e72b10021c66c31c2dbb4df2c, for GNU/Linux 3.2.0, not stripped

我的问题是如何使用arm处理器在安卓系统中运行ELF version

我将install/libs中的静态库复制到移动的/system/lib/中。将version文件复制到/data/local/tmp并授予执行特权。然后执行version得到输出"./version:没有这样的文件或目录“。

代码语言:javascript
复制
130|cactus:/data/local/tmp # ./version
/system/bin/sh: ./version: No such file or directory
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-19 15:38:04

我发现原因是动态链接解释器,而android没有linux平台的解释器。用NDK重建opencv后,得到了静态库。用NDK的clang编译器构建go项目,问题就解决了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70409155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档