繁体   English   中英

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

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

我一直在努力在运行Ubuntu 16.04的 x64双Xeon上交叉编译OpenCV for arm

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

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

我努力了

dpkg --add-architecture armhf

我已经尝试在sources.list添加url来安装依赖项。

我尝试使用:armhf后缀安装依赖项,但这些依赖项本身往往具有依赖项,我最终会:armhf表单错误: cannot install

我也尝试过使用

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

但这似乎没有帮助。

所以,首先我想了解:

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

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

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

感谢帮助

编辑

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

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

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

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

所需的文件夹大多是

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM