• 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文件来配置和编译,流程如下:

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

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

    1. ├── cmake
    2. │   └── assimp-5.2
    3. │   ├── assimpConfig.cmake
    4. │   ├── assimpConfigVersion.cmake
    5. │   ├── assimpTargets.cmake
    6. │   └── assimpTargets-noconfig.cmake
    7. ├── libassimp.so -> libassimp.so.5
    8. ├── libassimp.so.5 -> libassimp.so.5.2.4
    9. ├── libassimp.so.5.2.4
    10. └── pkgconfig
    11. └── assimp.pc

    2.2 aarch64交叉编译与移植

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

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

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

    1. diff --git a/CMakeLists.txt b/CMakeLists.txt
    2. index 2c55fce0a..f2aa3c829 100644
    3. --- a/CMakeLists.txt
    4. +++ b/CMakeLists.txt
    5. @@ -55,7 +55,31 @@ IF(ASSIMP_HUNTER_ENABLED)
    6. add_definitions(-DASSIMP_USE_HUNTER)
    7. ENDIF()
    8. -
    9. +#add cross compile start
    10. +if("$ENV{MY_TARGET_ARCH}" STREQUAL "aarch64")
    11. + set(CMAKE_C_COMPILER "/usr/bin/aarch64-linux-gnu-gcc")
    12. + set(CMAKE_CXX_COMPILER "/usr/bin/aarch64-linux-gnu-g++")
    13. +
    14. + set(CMAKE_SYSTEM_NAME Linux)
    15. + set(CMAKE_SYSTEM_PROCESSOR arm64)
    16. +
    17. + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
    18. + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
    19. + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
    20. + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
    21. + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
    22. + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu17")
    23. +endif()
    24. +#add cross compile end
    25. PROJECT(Assimp VERSION 5.2.4)
    26. # All supported options ###############################################

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

    $export MY_TARGET_ARCH=aarch64

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

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

    编译后 目录同桌面版。

    特殊说明:

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

    rm -rf  CMakeCache.txt generated CMakeFiles

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

  • 相关阅读:
    【项目实战课】人人免费可学,基于ResNet的生活垃圾图像分类实战
    经管博士科研基础【25】概率论中的相关基础概念
    最新版SpringBoot整合Mybatis-plus,实现增删改查(CRUD)
    阿里二面凉了,难蹦。。。
    99%的人都把三层架构和SpringMVC的关系搞错了
    C++基础篇之引用和其他细碎语法
    微服务系列之授权认证(二) identity server 4
    UE4/5 竖排文字文本
    第三次pta认证P测试C++
    pmp考试是什么?
  • 原文地址:https://blog.csdn.net/vviccc/article/details/126228424