- 准备工作
-
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=
pwdTOOLCHAIN_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