我找不到答案所以在这里询问。
我使用 Linaro 64 位 ARM 交叉编译器在 Intel 上的本地 Ubuntu 14.04 64 位 Linux 上编译我的代码(gcc-linaro-5.3-2016.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
)。
我的代码需要使用libsensor4
和libsensor4-dev
链接器选项-lsensors
。我使用 64 位 Ubuntu 14.04 主机 Linux on Intel 编译代码没有问题。但每次我使用 64 位 ARM 交叉编译器编译代码时都会出现错误:
cannot find -lsensors
和
sensors/sensors.h: no such file or directory.
是-lsensors
来自libsensors4.deb
并且是sensors.h
来自libsensors4-dev
。那么我如何才能将这两个包放入 Linaro 交叉编译器中?
答案1
将aarch64
包放入构建系统的一种方法是将其作为外部架构启用:
sudo dpkg --add-architecture aarch64
sudo apt-get update
现在,您可以删除libsensors4-dev
您的构建体系结构并将其安装到主机体系结构中aarch64
:
sudo apt-get install libsensors4-dev- libsensors4-dev:aarch64+
有必要删除构建体系结构包,因为它不能与不同体系结构的同名包共存。libsensors4:aarch64
但是依赖项可以与libsensors4
1共存。这意味着您可以继续在构建系统上运行动态链接的程序libsensors4
,但不能使用它libsensors4-dev
来链接新的以此为基础构建架构程序。
我不知道您是如何配置和安装交叉编译器的,但 GCC 通常会选择头文件 ( /usr/include
) 和库文件 ( /usr/lib/<architecture>-<system-type>
) 的规范位置,这正是 DPKG 从中提取它们的位置libsensors4-dev
(任何体系结构)。如果不是这种情况,您可以告诉 GCC/G++ 使用 添加包含文件目录,使用-I<PATH>
添加库目录-L<PATH>
。此外,您还可以使用 列出当前包含目录,gcc -xc++ -E -v /dev/null
使用 gcc 列出当前库目录gcc -print-search-dirs
。
1Multi-Arch
如果您查看包控制信息中的字段,则可以检查包是否可以与不同体系结构的“兄弟”共存。“相同”表示可以共存。使用dpkg-query -s <PACKAGE>
、apt-cache show <PACKAGE>
或dpkg-deb -I <DEB-FILE>
显示包控制信息。有关更多信息,请参阅二进制包控制字段的多架构规范。