cross-compile 具有依赖性:如何获取主机上的目标依赖性?

cross-compile with dependencies: how to get target dependencies on host?

我一直在努力 cross-compile OpenCV for arm 在我的 x64 双 Xeon 运行 Ubuntu16.04

我了解 cross-compiler 的工作原理,编译一个简单的项目很好,但是 OpenCV 有很多依赖项。

我不明白如何在用于 cross-compile

的主机上加载这些依赖项(仅限 headers?)

我试过了

dpkg --add-architecture armhf

并且我尝试在 sources.list 中添加 url 以安装依赖项。

我尝试安装带有 :armhf 后缀的依赖项,但这些依赖项本身往往具有依赖项,我最终得到以下形式的错误:cannot install

我也尝试使用

apt-get build-dep --download-only <dependency>:armhf

但这似乎无济于事。

所以,首先我想了解一下:

抱歉,如果它含糊不清;我只是不确定在哪里寻找这个。我在 cross-compiling 上看到的每个教程都将依赖项放在一边,而在 cross-compiling 上的 OpenCV 项目解释假设 reader 已经知道所有这些......

感谢帮助

编辑

我在下面添加了我的解决方案,但我觉得这不太理想,因为它需要先在目标上安装所有内容。 显然,目标无论如何都需要依赖项,但是不需要所有的开发库和运行时 headers

所以我还在寻找更好的解决方案

我成功交叉编译了,但是有点痛苦。

到目前为止,我发现在编译主机上获取依赖项的唯一方法是简单地从 target 我安装它们的地方复制文件。

需要的文件夹主要是

  • /usr(尤其是 usr/include/usr/lib/usr/bin
  • /lib
  • /opt(如果您在那里设置了任何特殊的库)

您可以 tar 这些文件夹并将它们复制到主机,或使用 rsync。

之后,您必须确保配置路径 cmake

我将内容复制到一个名为 sysroot-chip 的文件夹中,与 opencv 处于同一级别,我的构建目录也在同一级别(在 opencv 之外)

并向 cmake 添加了以下标志:

-D INCLUDE_DIRECTORIES=../sysroot-chip/usr/lib \
-D INCLUDE_DIRECTORIES=../sysroot-chip/usr/bin \
-D INCLUDE_DIRECTORIES=../sysroot-chip/opt/lib \
-D INCLUDE_DIRECTORIES=../sysroot-chip/lib \
-D PYTHON2_INCLUDE_PATH=../sysroot-chip/usr/include/python2.7 \
-D PYTHON2_LIBRARIES=../sysroot-chip/usr/lib/python2.7 \
-D PYTHON2_NUMPY_INCLUDE_DIRS=../sysroot-chip/usr/lib/python2.7/dist-packages \
-D PYTHON3_INCLUDE_PATH=../sysroot-chip/usr/include/python3.4 \
-D PYTHON3_LIBRARIES=../sysroot-chip/usr/lib/python3.4 \
-D PYTHON3_NUMPY_INCLUDE_DIRS=../sysroot-chip//usr/lib/python3.4/dist-packages \

连同交叉编译工具链标志:

-D CMAKE_TOOLCHAIN_FILE=../opencv-3.1.0/platforms/linux/arm-gnueabi.toolchain.cmaketoolchain.cmake \