如何为STM32-F767ZI ARM处理器交叉编译libbson库
报错原因排查
- 核心问题出在参数使用错误:
CMAKE_TOOLCHAIN_FILE需要传入的是CMake格式的工具链配置文本文件,你错误传入了arm-none-eabi-gcc编译器二进制可执行文件。CMake尝试将二进制文件当做脚本解析时,读取到ELF二进制头标识就触发了语法报错。
正确libbson交叉编译配置方案
步骤1:编写ARM交叉编译工具链配置文件
在libbson源码根目录下新建arm-stm32-toolchain.cmake文件,写入如下内容,可根据你使用的STM32内核型号调整对应编译参数:
set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_SYSTEM_PROCESSOR arm) # 替换为你的arm-none-eabi-gcc实际安装路径 set(TOOLCHAIN_PATH ~/arm_compiler/gcc-arm-none-eabi-10.3-2021.07) set(CMAKE_C_COMPILER ${TOOLCHAIN_PATH}/bin/arm-none-eabi-gcc) set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PATH}/bin/arm-none-eabi-g++) # 针对STM32的编译参数,以下为Cortex-M4带FPU的示例,可根据实际内核修改 set(CMAKE_C_FLAGS "-mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -specs=nano.specs" CACHE INTERNAL "") set(CMAKE_CXX_FLAGS ${CMAKE_C_FLAGS} CACHE INTERNAL "") set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_PATH}) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
步骤2:执行编译命令
进入源码的build目录下执行以下命令:
cmake -DENABLE_MONGOC=OFF -DCMAKE_TOOLCHAIN_FILE=../arm-stm32-toolchain.cmake -DCMAKE_INSTALL_PREFIX=./bson_output .. make -j$(nproc) make install
编译完成后,生成的头文件、静态库都会输出到build/bson_output目录下,直接导入STM32CubeIDE工程即可使用。
内容的提问来源于stack exchange,提问作者s_sliwinski
相关产品推荐
相关产品推荐

