CMake报错“Detecting CXX compiler ABI info - failed”原因及解决方法
关于CMake报错“Detecting CXX compiler ABI info - failed”的解析
报错含义
Detecting CXX compiler ABI info - failed 指CMake在尝试探测C++编译器的**应用二进制接口(ABI)**信息时失败。ABI定义了编译后的二进制文件与其他库、组件交互的标准(比如函数调用约定、数据结构布局等),CMake需要这些信息来生成匹配目标平台的构建配置,确保编译出的程序能正常链接和运行。
常见成因
- 交叉编译环境不完整:从输出看使用的是aarch64架构的交叉编译器,但可能缺少对应的C++标准库、头文件,导致CMake无法编译测试程序来探测ABI。
- 编译器版本兼容问题:CMake版本过旧,对当前使用的gcc 10.2交叉编译器的支持不完善;或者交叉编译器本身损坏、安装不完整。
- 依赖组件缺失:交叉编译环境未安装必要的配套库(如
aarch64-none-linux-gnu-libstdc++),导致测试编译无法完成。 - CMake配置错误:未正确设置交叉编译工具链参数,比如未指定工具链文件,或编译器路径配置有误,导致CMake无法正常调用编译器执行测试。
解决方法
- 补全交叉编译环境:
验证交叉编译器能否正常编译C++程序,执行以下命令:
如果编译失败,说明工具链缺失组件,需重新下载完整的交叉编译包,或安装对应的依赖库(如针对aarch64的libstdc++开发包)。/home/bob/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++ -o test test.cpp - 匹配CMake与编译器版本:
升级CMake到支持当前gcc版本的稳定版;若编译器损坏,重新解压或安装交叉编译工具链。 - 正确配置交叉编译工具链:
创建工具链文件(比如aarch64-toolchain.cmake),内容示例:
运行CMake时指定工具链文件:set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) set(CMAKE_C_COMPILER /home/bob/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc) set(CMAKE_CXX_COMPILER /home/bob/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++)cmake .. -DCMAKE_TOOLCHAIN_FILE=./aarch64-toolchain.cmake - 临时手动指定ABI(仅作为 workaround):
若上述方法无效,可手动设置ABI参数,比如:
注:cmake .. -DCMAKE_CXX_ABI=00对应旧ABI(禁用C++11 ABI),1对应新ABI,需根据目标环境选择。
内容的提问来源于stack exchange,提问作者Dane
相关产品推荐
相关产品推荐

