OpenCV v3.3.1 ARM交叉编译失败:未找到CMAKE_CXX_COMPILER
解决ARM交叉编译OpenCV 3.3.1时找不到C/C++编译器的问题
我来帮你搞定这个交叉编译时的编译器缺失问题——毕竟x86系统默认的编译器没法直接编译ARM架构的代码,下面是一步步的解决方案:
1. 先安装适配ODROID-XU4的ARM交叉编译工具链
ODROID-XU4基于ARMv7架构,支持硬浮点指令集,所以我们需要安装gnueabihf版本的交叉编译工具:
sudo apt-get update && sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
安装完成后,验证工具是否正常可用:
arm-linux-gnueabihf-gcc --version arm-linux-gnueabihf-g++ --version
如果能输出编译器的版本信息,说明安装成功。
2. 显式指定编译器重新运行CMake
你之前的CMake命令只指定了工具链文件,但工具链文件可能没正确识别我们刚安装的编译器,我们可以通过两种方式明确指定:
方式一:通过环境变量传递编译器信息
在cmake命令前直接设置CC和CXX环境变量:
CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-gnueabi.toolchain.cmake ..
方式二:通过CMake参数直接指定
把编译器名称作为参数传入cmake命令:
cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-gnueabi.toolchain.cmake \ -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc \ -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ \ ..
3. (可选)修正工具链文件的默认配置
如果你不想每次都手动指定编译器,可以打开../platforms/linux/arm-gnueabi.toolchain.cmake文件,找到设置编译器的部分,把:
SET(CMAKE_C_COMPILER arm-linux-gnueabi-gcc) SET(CMAKE_CXX_COMPILER arm-linux-gnueabi-g++)
修改为:
SET(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc) SET(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
保存后再运行原来的cmake命令即可。
4. 清理旧缓存重新尝试
如果之前的CMake缓存已经存在,可能会干扰新的配置,建议先清理后再重新操作:
rm -rf /home/jhon/Programs/opencv-3.3.1/arm/* cd /home/jhon/Programs/opencv-3.3.1/arm # 然后运行上面的cmake命令
错误原因说明
交叉编译时,CMake不会使用系统默认的x86架构编译器,必须指定对应ARM架构的交叉编译器。你之前的工具链文件要么因为没安装对应编译器而找不到,要么默认指定的编译器名称和你安装的版本不符,导致CMake报错找不到C/C++编译器。
内容的提问来源于stack exchange,提问作者HMaster
相关产品推荐
相关产品推荐

