对于assimp的交叉编译,目前网上没见到debian版本aarch64版本上搞过的,因此整一篇。该文章的目标是编译一套aarch64 Linux Debian嵌入式版本上可以运行的版本库,接下来就开始趟坑。老套路,先把linux桌面版搞好,然后 移植到嵌入式Linux Debian 板子上。
assimp(全称:Open Asset Import Library )用于导入和导出各种 3d 模型格式的库,包括场景后期处理 以及 补充生成缺失的渲染数据(这里的导入是把model文件,解析成ASSIMP自身定义的一套模型,导出即是把自身建立的模型结构导出为model文件)。
那么为啥要搞这么一个东西出来呢?因为对于3D渲染的工作,建模是一件工作量大又麻烦的事情,网上的模型格式很多,如果自己去解析代价太高了。而assimp为模型的导入导出提供了良好的支持。宗旨,这东西可以理解为提升工作效率的高强度辅助工具啦。
项目下载地址:GitHub - assimp/assimp Project
如果想更多了解assimp,可以参考官方文档:The Asset-Importer-Lib Documentation
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
因为是用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
将所有中间文件删除,这样才可以。