HuaWei Atlas200 DK交叉编译踩坑记录

文章目录

  • HuaWei Atlas200 DK交叉编译踩坑记录

HuaWei Atlas200 DK交叉编译踩坑记录

由于需要用到OpenCV以及CV的一个特征提取的库vlfeat,并且MindStudio没有代码提示,没有函数、变量跳转,所以想要换个编辑器,这就需要改为命令行构建。华为Atlas 200DK demo项目的命令行构建方式可以参考这篇文章。

首先,交叉编译工具使用aarch64-linux-gnu-gcc v5OpenCV v3.4.2, vl-feat v0.9.20

OpenCV在交叉编译之前,需要先交叉编译好一些依赖库,包括 zlib, jpegsrc,libpngyasm,x264-snapshot,xvidcore,ffmpeg。这些依赖库的CMAKE编译选项可以参考这篇文章opencv交叉编译环境搭建-aarch64。
需要注意的是ffmpeg 如果编译出错,可以尝试使用旧一点的版本,我使用的是 v2.7.7。
最后一个步骤OpenCV的编译很容易出错,尝试了很多CMAKE的选项的设置,最终使用OpenCV v3.4.2交叉编译成功的CMAKE命令如下:

cmake -DWITH_V4L=ON -DWITH_1394=ON -DWITH_LIBV4L=ON -DINSTALL_C_EXAMPLES=OFF -DWITH_GTK=ON --enable-shared --disable-static  -DCMAKE_MAKE_PROGRAM=make -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local/arm64 -DWITH_OPENGL=OFF -DWITH_GDAL=OFF -DWITH_XINE=ON -DBUILD_EXAMPLES=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_DOCS=OFF  -DWITH_FFMPEG=ON -DENABLE_NEON=OFF -DBUILD_opencv_cudalegacy=OFF -DBUILD_opencv_cudafilters=OFF -DBUILD_opencv_cudastereo=OFF -DBUILD_opencv_cudafeatures2d=OFF -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake -DFFMPEG_LIBRARY_DIRS="/usr/local/arm64/lib" ..

相关的路径需要改成自己的,其中toolchain.cmake文件内容如下:

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm64)
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)

set(CMAKE_FIND_ROOT_PATH "/usr/local/arm64")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

其中CMAKE_FIND_ROOT_PATH是之前那些依赖库的目标路径,该路径下有include, lib等文件夹。

为了让交叉编译器能够搜索到这些头文件和库文件,需要将这些交叉编译好的库复制到交叉编译器的默认路径中。对于aarch64-linux-gnu-gcc v5交叉编译器来说,其默认的链接库路径为 /usr/lib/gcc-cross/aarch64-linux-gnu/5/,默认头文件路径为/usr/lib/gcc-cross/aarch64-linux-gnu/5/include。当然,默认的路径还有其他的几个。查看编译器的默认头文件与链接库搜索路径使用命令:

echo 'main(){}' | aarch64-linux-gnu-gcc -v -E -

输出如下图所示
HuaWei Atlas200 DK交叉编译踩坑记录_第1张图片

对于vlfeat 库的交叉编译,从vlfeat源码的Makefile里面没看到ARCH 是arm64的,不过发现是有ubuntu arm 的deb包的。不过安装好后,动态链接库libvl.so是不在交叉编译器的默认路径上的,需要放到该默认路径上,并且还需要创建一个软链接 名称为libvl.so,因为安装了deb的动态链接库的名称为libvl.so.0.9.20,如果直接复制过去,make的时候 -lvl同样会出错。这样创建一个名称为libvl.so的软链接指向 libvl.so.0.9.20编译器就能找到了。

你可能感兴趣的:(Atlas,200,交叉编译)