HAve一些非常令人费解的东西(或者对我来说听起来很奇怪)。希望你们能给我更清楚的解释
已经交叉编译一个文件使用环境安装-文件(环境-安装-aarch64-poky-linux)从Yocto分发为一个arm。我理解它是设置环境(通过使用源环境-安装-文件)
它包含
我发现令人困惑的是工具链的位置。它不是应该在SDKTARGETSYSROOT (工具链由其他人设置,SDKTARGETSYSROOT= /opt/fsl-imx-xwayland/4.14-sumo/environment-setup-aarch64-poky-linux
)中找到吗?我发现我的aarch64-poky-linux-gcc是在SDKTARGETSYSROOT目录之外的目录中找到的(尽管gcc在PATH,/opt/fsl-imx-xwayland/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux
中找到)
是否有理由这样做?我一直在编码代码,但想知道为什么会这样?
谢谢
发布于 2022-02-12 18:15:36
这需要使用交叉加拿大编译器(这里是GCC),而不是Yocto,Yocto使用传递给GCC:https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html的https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html参数连接它的编译器逻辑。
这告诉GCC将传递给--sysroot
的内容当作目标上典型编译的sysroot来处理,例如GCC通常希望在/usr/lib
中找到/usr/include或库中的标头,如果我们通过--sysroot=/foo/
,它将自动分别查看/foo/usr/include
和/foo/usr/lib
。
Yocto中的工具链脚本使用--sysroot=SDKTARGETSYSROOT
传递安装SDK的目录,因此它找到了能够从SDK交叉编译的适当的头和库,以获得更多信息:https://git.yoctoproject.org/poky/tree/meta/classes/toolchain-scripts.bbclass
现在为什么GCC在那个目录之外呢?因为该目录只包含目标体系结构的文件(因此,SDKTARGETSYSROOT
,SDK
:对于SDK,TARGET
:用于目标arch,SYSROOT
:要使用的sysroot ),GCC不是。GCC是编译后在您的主机上运行的,因此它不属于这个目录,这就是为什么您看到根路径的x86_64-pokysdk-linux
部分,GCC实际上安装在其中,您的主机三胞胎是64位x86体系结构,它是由poky (Yocto)构建的SDK,它的操作系统是Linux。
https://stackoverflow.com/questions/71093162
复制相似问题