Linux aarch64交叉编译之 assimp模型库

网友投稿 371 2022-08-23

Linux aarch64交叉编译之 assimp模型库

对于assimp的交叉编译,目前网上没见到debian版本aarch64版本上搞过的,因此整一篇。该文章的目标是编译一套aarch64 Linux Debian嵌入式版本上可以运行的版本库,接下来就开始趟坑。老套路,先把linux桌面版搞好,然后 移植到嵌入式Linux Debian 板子上。

1 assimp简介

assimp(全称:Open Asset Import Library )用于导入和导出各种 3d 模型格式的库,包括场景后期处理 以及 补充生成缺失的渲染数据(这里的导入是把model文件,解析成ASSIMP自身定义的一套模型,导出即是把自身建立的模型结构导出为model文件)。

那么为啥要搞这么一个东西出来呢?因为对于3D渲染的工作,建模是一件工作量大又麻烦的事情,网上的模型格式很多,如果自己去解析代价太高了。而assimp为模型的导入导出提供了良好的支持。宗旨,这东西可以理解为提升工作效率的高强度辅助工具啦。

项目下载地址:​​GitHub - assimp/assimp Project​​

如果想更多了解assimp,可以参考官方文档:​​The Asset-Importer-Lib Documentation​​

2 Linux 本地编译 & 交叉编译

2.1 Linux(ubuntu20.04)上assimp的编译

assimp通过cmake文件来配置和编译,流程如下:

$cmake -DCMAKE_INSTALL_PREFIX=$PWD/out CMakeLists.txt $make$make install

编译成功后在out目录下生对应的include和lib,lib内容如下:

├── cmake│ └── assimp-5.2│ ├── assimpConfig.cmake│ ├── assimpConfigVersion.cmake│ ├── assimpTargets.cmake│ └── assimpTargets-noconfig.cmake├── libassimp.so -> libassimp.so.5├── libassimp.so.5 -> libassimp.so.5.2.4├── libassimp.so.5.2.4└── pkgconfig └── assimp.pc

2.2 aarch64交叉编译与移植

因为是用aarch64交叉编译,需要提前配置环境,安装如下软件:

sudo apt install binutils-aarch64-linux-gnu-dbg binutils-aarch64-linux-gnu cpp-aarch64-linux-gnu \g++-10-aarch64-linux-gnu g++-9-aarch64-linux-gnu g++-aarch64-linux-gnu g++ \gcc-10-aarch64-linux-gnu-base gcc-9-aarch64-linux-gnu-base gcc-aarch64-linux-gnu \pkg-config-aarch64-linux-gnu qemu-efi-aarch64 gcc arch-test

调整CMakeLists.txt,在该文件中添加如下内容:

diff --git a/CMakeLists.txt b/CMakeLists.txtindex 2c55fce0a..f2aa3c829 100644--- a/CMakeLists.txt+++ b/CMakeLists.txt@@ -55,7 +55,31 @@ IF(ASSIMP_HUNTER_ENABLED) add_definitions(-DASSIMP_USE_HUNTER) ENDIF()-+#add cross compile start+if("$ENV{MY_TARGET_ARCH}" STREQUAL "aarch64")+ set(CMAKE_C_COMPILER "/usr/bin/aarch64-linux-gnu-gcc")+ set(CMAKE_CXX_COMPILER "/usr/bin/aarch64-linux-gnu-g++")+ + set(CMAKE_SYSTEM_NAME Linux)+ set(CMAKE_SYSTEM_PROCESSOR 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)+ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu17")+endif()+#add cross compile end PROJECT(Assimp VERSION 5.2.4) # All supported options ###############################################

添加该内容后,在主目录下执行:

$export MY_TARGET_ARCH=aarch64

之后和桌面版的编译流程类似,如下所示:

$cmake -DCMAKE_INSTALL_PREFIX=$PWD/out_aarch64 CMakeLists.txt $make$make install

编译后 目录同桌面版。

特殊说明:

这里在编译完桌面版后再编译嵌入式aarch64版本时需要对之前桌面版的中间文件进行删除,但是执行make clean 并不能全部删除,需要手动执行

rm -rf CMakeCache.txt generated CMakeFiles

将所有中间文件删除,这样才可以。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:机器人微控制器编程(CoCube)-深度融合
下一篇:【控制】动力学建模简介 --> 牛顿-欧拉 (Newton-Euler) 法和拉格朗日 (Lagrange) 法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~