当前位置: 首页 > 工具软件 > Assimp > 使用案例 >

Linux aarch64交叉编译之 assimp模型库

东方和志
2023-12-01

对于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.txt
index 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

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

 类似资料: