使用依赖项进行交叉编译:如何在主机上获取目标依赖项?

时间:2016-09-27 18:29:22

标签: c++ opencv arm cross-compiling

我一直在努力为运行 Ubuntu 16.04

的x64双Xeon上的arm交叉编译 OpenCV

我理解交叉编译器是如何工作的,并且很好地编译了一个简单的项目,但OpenCV有很多依赖项。

我不明白如何在用于交叉编译的主机上加载这些依赖项(仅限标题?)

我试过了

dpkg --add-architecture armhf

我尝试在sources.list中添加网址来安装依赖项。

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

我也尝试使用

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

但这似乎没有帮助。

所以,首先我想了解:

  • 我是否需要包含源代码的依赖库,或只需要标题?我想我只需要标题,但现在我很困惑。

  • 为了交叉编译,我到底需要做些什么才能获得主机的依赖?

对不起,如果它含糊不清;我只是不确定在哪里寻找这个。我在交叉编译时看到的每个教程都将依赖关系放在一边,而关于交叉编译的OpenCV项目解释假设读者已经知道所有这些......

感谢您的帮助

修改

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

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

1 个答案:

答案 0 :(得分:1)

我设法进行了交叉编译,但这有点痛苦。

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

所需的文件夹主要是

  • /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 \