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
但这似乎无济于事。
所以,首先我想了解一下:
我需要带有源代码的依赖库,还是只需要 headers?我想我只需要 headers,但我现在很困惑。
为了交叉编译,我到底需要做什么来获取主机上的依赖项?
抱歉,如果它含糊不清;我只是不确定在哪里寻找这个。我在 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 \
我一直在努力 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
但这似乎无济于事。
所以,首先我想了解一下:
我需要带有源代码的依赖库,还是只需要 headers?我想我只需要 headers,但我现在很困惑。
为了交叉编译,我到底需要做什么来获取主机上的依赖项?
抱歉,如果它含糊不清;我只是不确定在哪里寻找这个。我在 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 \