LINUX高通平台交叉编译地图软件PROJ

  • 准备工作

LINUX编译地图软件PROJ-CSDN博客

  • toolchain脚本

    set(CMAKE_SYSTEM_NAME Linux)
    set(CMAKE_SYSTEM_PROCESSOR aarch64)

    高通OE交叉编译器前缀

    set(TOOLCHAIN_PREFIX "aarch64-oe-linux-")
    set(CMAKE_C_COMPILER {TOOLCHAIN_PREFIX}gcc) set(CMAKE_CXX_COMPILER {TOOLCHAIN_PREFIX}g++)
    set(CMAKE_AR {TOOLCHAIN_PREFIX}ar) set(CMAKE_RANLIB {TOOLCHAIN_PREFIX}ranlib)
    set(CMAKE_LIBRARY_ARCHIVER ${TOOLCHAIN_PREFIX}ar)

    Sysroot路径

    set(TOOLCHAIN_SYSROOT "/usr/local/x86-aarch64-toolchain/sysroots/aarch64-oe-linux")
    set(CMAKE_SYSROOT ${TOOLCHAIN_SYSROOT})

    交叉查找规则

    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)

    编译flag适配高通AArch64

    set(CMAKE_C_FLAGS "-march=armv8-a -O2 -Os")
    set(CMAKE_CXX_FLAGS "-march=armv8-a -O2 -Os -include limits")

  • 编译脚本

    SOURCE_ROOT_PATH=pwd

    TOOLCHAIN_PATH=/usr/local/x86-aarch64-toolchain
    CROSS_NAME=aarch64-oe-linux
    CROSS_BIN={TOOLCHAIN_PATH}/sysroots/x86_64-qtisdk-linux/usr/bin/{CROSS_NAME}
    export PATH={CROSS_BIN}:{PATH}

    . {TOOLCHAIN_PATH}/environment-setup-aarch64-oe-linux . {TOOLCHAIN_PATH}/environment-setup-aarch64-oe-linux-sdllvm

    配置全局变量

    TOOLCHAIN_FILE="{SOURCE_ROOT_PATH}/aarch64-oe.cmake" SYSROOT="{TOOLCHAIN_PATH}/sysroots/aarch64-oe-linux"

    PROJ_INSTALL_DIR=$HOME/proj_install

    make clean
    rm -rf CMakeCache.txt CMakeFiles
    rm -rf ${PROJ_INSTALL_DIR}

    BUILD_DIR=build
    if [ -d {BUILD_DIR} ]; then rm -rf {BUILD_DIR}
    fi
    mkdir {BUILD_DIR} cd {BUILD_DIR}

    cmake ..
    -DCMAKE_TOOLCHAIN_FILE={TOOLCHAIN_FILE} \ -DCMAKE_INSTALL_PREFIX={PROJ_INSTALL_DIR}
    -DCMAKE_FIND_ROOT_PATH=${SYSROOT}

    make -j$(nproc) # -j 参数可以加速编译
    make install

  • 检查编译结果

    $ file libproj.so.25.9.8.1
    libproj.so.25.9.8.1: ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=8b831cfdeda88efdcd4bc6f706da272400451831, with debug_info, not stripped