使用 Yocto Project 在 x86-64 主机上为 nvidia tk1 (arm) 目标交叉编译带有 CUDA 的 OpenCV?

Cross compile OpenCV with CUDA on x86-64 host for nvidia tk1 (arm) target using Yocto Project?

我想使用 Yocto 项目为使用 nvidia tegra k1 处理器的系统构建自定义 Linux,该处理器具有 arm cortex A 15(32 位)和 GPU。此外,需要安装支持 CUDA 的 OpenCV(版本 >= 3.0)。

现在,当 Bitbake 尝试使用 CUDA 编译 OpenCV 时,它会崩溃,因为 nvcc 抛出错误 Syntax error: word unexpected (expecting ")") 如果您尝试 运行 一个 nvcc 二进制文件,通常会出现这种情况 I learned对于错误的系统(例如 64 位系统上的 32 位 nvcc)。所以我猜它只是 运行 支持目标系统的 nvcc,因此崩溃了。

  1. 我不知道是否需要使用主机系统的常用 x86-64bit-nvcc 或(如果存在)一些交叉编译-nvcc 进行编译。
  2. 我需要知道如何将所述编译器纳入 bitbake 构建 OpenCV 的过程。

我想通了:

  1. 需要使用支持主机架构的 nvcc 二进制文件。要指定目标体系结构,可以将其传递给交叉编译标志(请参阅 http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/#cross-compilation)。这些是通过 cmake 标志 -DCUDA_NVCC_FLAGS
  2. 传递的
  3. EXTRA_OECMAKE_append = "-DCUDA_NVCC_EXECUTABLE=${PATH_TO_THE_NVCC_BINARY}"

bbappend 文件中的整个语句可能如下所示

EXTRA_OECMAKE_append = " \
    -DCUDA_NVCC_EXECUTABLE=${NVCC_BINARY} \ 
    -DCUDA_NVCC_FLAGS="--compiler-bindir ${GCC_BINARY}"  \
    "