使用依赖项交叉编译:如何在主机上获得目标依赖项

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

本文关键字:依赖 主机 目标 交叉编译      更新时间:2023-10-16

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

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

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

我试过了

dpkg --add-architecture armhf

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

我已经尝试安装与:armhf后缀的依赖关系,但这些依赖关系往往有依赖关系本身,我最终以错误的形式:cannot install

我也试过使用

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

但这似乎没有帮助。

那么,首先我想了解一下:

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

  • 我到底需要做些什么来获得主机上的依赖关系,以便交叉编译?

很抱歉,如果它是模糊的;我只是不知道该去哪里找。我看到的每一个关于交叉编译的教程都把依赖关系放在一边,关于交叉编译的OpenCV项目解释假设读者已经知道了所有这些…

Thanks for help

编辑

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

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

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

到目前为止,我找到的唯一方法是在编译主机上获得依赖项,就是简单地从我安装它们的目标位置复制文件。

需要的文件夹大多是

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