交叉编译OpenCV至Arm64遇-msse编译错误,如何配置CMake?
解决交叉编译OpenCV到Arm64时的SSE编译选项错误
你的问题根源是CMake未正确识别目标平台为Arm64,默认沿用了主机(x86_64)的编译优化选项,导致生成了Arm64编译器不支持的-msse系列参数。以下是具体解决步骤:
1. 创建Arm64交叉编译工具链文件
创建一个名为aarch64-linux-gnu.toolchain.cmake的文件,明确指定目标平台与交叉编译器:
set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) # 指定Arm64交叉编译器路径 set(CMAKE_C_COMPILER /opt/l4t-gcc-toolchain-64-bit-32-7.1/bin/aarch64-linux-gnu-gcc) set(CMAKE_CXX_COMPILER /opt/l4t-gcc-toolchain-64-bit-32-7.1/bin/aarch64-linux-gnu-g++) # 跳过编译器有效性检查(避免主机环境干扰) set(CMAKE_C_COMPILER_WORKS 1) set(CMAKE_CXX_COMPILER_WORKS 1) # 配置CUDA交叉编译参数 set(CUDA_TOOLKIT_ROOT_DIR /usr/local/cuda-10) set(CUDA_HOST_COMPILER ${CMAKE_C_COMPILER}) set(CUDA_TARGET_VARIANT aarch64-linux-gnu)
2. 修改CMake命令,引入工具链文件
在原有CMake命令中加入工具链文件参数,并手动禁用SSE相关优化选项(双重保障):
cmake -D CMAKE_BUILD_TYPE=RELEASE \ -DCMAKE_TOOLCHAIN_FILE=./aarch64-linux-gnu.toolchain.cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DOPENCV_GENERATE_PKGCONFIG=ON \ -DBUILD_EXAMPLES=OFF \ -DWITH_CUDA=ON \ -DCUDA_ARCH_BIN="6.2" \ -DINSTALL_PYTHON_EXAMPLES=OFF \ -DINSTALL_C_EXAMPLES=OFF \ -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.4.0/modules/ \ -DENABLE_CXX11=ON \ -DENABLE_SSE=OFF -DENABLE_SSE2=OFF -DENABLE_SSE3=OFF ..
关键说明
- 工具链文件是CMake识别交叉编译目标的核心,仅单独设置CUDA参数不足以让CMake切换目标平台。
- 手动禁用
ENABLE_SSE系列选项可确保即使CMake有残留逻辑,也不会生成不兼容的编译参数。
内容的提问来源于stack exchange,提问作者user5265160
相关产品推荐
相关产品推荐

