【问题标题】:OpenCV v3.3.1 Cross compilation for ARM Fails: No CMAKE_CXX_COMPILER could be foundARM 的 OpenCV v3.3.1 交叉编译失败:找不到 CMAKE_CXX_COMPILER
【发布时间】:2018-01-31 13:08:06
【问题描述】:

我遵循本教程Cross compilation for ARM based Linux systems,以便使用cmake 为基于ARM 的Linux 系统构建Opencv 3.3.1 版(Ubuntu Mate 在ODROID-XU4 Mini PC 上运行)。对于构建过程,我正在运行Ubuntu Mate v 16.04.1 x86

请注意,我已经尝试按照本教程Opencv Installation in Linux 为我的Intel x86 Ubuntu based 跑步机构建相同版本的Opencv,并且我做到了成功。然而,当使用同一台机器为 ARM 构建它时,我得到了以下错误。

-- The CXX compiler identification is unknown
-- The C compiler identification is unknown
CMake Error at CMakeLists.txt:114 (project):
  No CMAKE_CXX_COMPILER could be found.

  Tell CMake where to find the compiler by setting either the environment
  variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
  to the compiler, or to the compiler name if it is in the PATH.


CMake Error at CMakeLists.txt:114 (project):
  No CMAKE_C_COMPILER could be found.

  Tell CMake where to find the compiler by setting either the environment
  variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
  the compiler, or to the compiler name if it is in the PATH.


-- Configuring incomplete, errors occurred!
See also "/home/jhon/Programs/opencv-3.3.1/arm/CMakeFiles/CMakeOutput.log".
See also "/home/jhon/Programs/opencv-3.3.1/arm/CMakeFiles/CMakeError.log".

这是产生此错误的命令行:

cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-gnueabi.toolchain.cmake ..

请注意,-DCMAKE_TOOLCHAIN_FILE 选项告诉cmake 为基于 ARM 的 Linux 系统构建 Opencv,当我尝试删除它时,我成功地为我的 x86 机器构建了Opencv,没有任何错误。

提前致谢。

【问题讨论】:

  • 除了使用适当的工具链传递 CMAKE_TOOLCHAIN_FILE 选项外,您还需要为该工具链安装编译器sudo apt-get install gcc-arm-linux-gnueabi。这在您参考的教程中有说明。
  • 感谢@Tsyvarev,但它已经安装好了,
  • gcc-arm-linux-gnueabi 已经是最新版本(4:5.3.1-1ubuntu1)。
  • 嗯,那么工具链已经找不到你的编译器了……不知道为什么。在切换到工具链之前,您是否清除了构建目录? (换句话说,命令cmake -DCMAKE_TOOLCHAIN_FILE=...应该在empty目录中执行。)
  • 是的,我确保在构建之前构建目录是空的,但是在尝试构建并出现错误之后,cmake 正在生成一些文件,包括可能对您有帮助的错误日志文件,在这里是它的链接:dropbox.com/s/ujjaap7u3hkl2hu/arm.zip?dl=0

标签: c++ opencv cmake arm odroid


【解决方案1】:

OpenCV 文档告诉只安装 C 交叉编译器(包gcc-arm-linux-gnueabi),但实际上 OpenCV 也需要 C++ 编译器。

所以还需要安装g++-arm-linux-gnueabi 包。

【讨论】:

  • 通过第一个问题后,我遇到了一个问题,尽管我使用 export 命令导出它的路径,但 cmake 无法找到 Java,它说:Java: -- ant: /usr/bin /ant (ver 1.9.6) -- JNI: NO -- Java wrappers: NO -- Java 测试: NO 但是当为我的本地机器构建时它可以正常找到它,请问有什么想法吗?!!提前致谢
  • 什么输出是没有交叉编译?请注意,该工具链执行set(CMAKE_FIND_ROOT_PATH /usr/arm-linux-gnueabi),并且它希望所有内容(库、头文件、程序)都位于此目录下,除非仅在配置/构建阶段需要它。我不知道,构建 OpenCV 或运行它是否需要 Java。
  • 没有交叉编译它输出:**-- Java: -- ant: /usr/bin/ant (ver 1.9.6) -- JNI: /usr/lib/jvm/default-java/include /usr/lib/jvm/default-java/include/linux /usr/lib/jvm/default-java/include -- Java wrappers: YES -- Java tests: YES**,如果你想为java开发构建java .so文件,构建OpenCV需要Java。
  • "如果您想为 java 开发构建 java .so 文件,则构建 OpenCV 需要 Java。" - 所以你需要目标机器(ARM)的java库。主机(x86)不适合交叉编译。
  • 是的,我想通了,我尝试为目标机器安装 jdk,在我的情况下,我已经安装了 jdk-8u162-linux-arm32-vfp-hflt(我已经在我的目标 ARM 机器上运行它 - ODROID XU4 ) 并且在调用 cmake 命令之前,我将新 jdk 的路径 导出JAVA_HOME 路径变量,但它仍然无法正常工作。难道是我安装的jdk不适合我的目标平台(知道它已经在我的ODROID设备上成功运行了)?!
【解决方案2】:

我一直想知道为什么没有为 Opencv-Linux 预先构建的二进制文件(我仍然不知道为什么)所以在这里我将我的工作发布给公众以从中受益,其中包括 Opencv 3.3.1 pre-为 Linux x86、x64 和 armv7hf 构建的版本(包括相应的 java 二进制文件)。

OpenCV Linux x86, x62 & armv7hf binaries

【讨论】:

    猜你喜欢
    • 2015-06-11
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多