Gcc yocto构建的工具链搜索路径问题

Gcc yocto构建的工具链搜索路径问题,gcc,yocto,Gcc,Yocto,我使用两个不同的yocto版本为IMX6构建了图像。详情如下 Yocto版本1: Yocto版本2: yocto update两个版本的工具链树结构@ 我使用两个使用两个不同yocto版本构建的工具链编译了以下示例程序 #include <stdio.h> int main(void) { return 0; } #包括 内部主(空) { 返回0; } 但使用yocto版本2构建的工具链给出了以下错误 test.c:1:19: fatal error: stdio.

我使用两个不同的yocto版本为IMX6构建了图像。详情如下

Yocto版本1: Yocto版本2: yocto update两个版本的工具链树结构@

我使用两个使用两个不同yocto版本构建的工具链编译了以下示例程序

#include <stdio.h>
int main(void)
{ 
    return 0; 
}
#包括
内部主(空)
{ 
返回0;
}
但使用yocto版本2构建的工具链给出了以下错误

test.c:1:19: fatal error: stdio.h: No such file or directory
 #include <stdio.h>
                ^
compilation terminated.
test.c:1:19:致命错误:stdio.h:没有这样的文件或目录
#包括
^
编译终止。
使用yocto版本1构建的工具链正在搜索下的头文件 “build/tmp/sysroot/imx6qsabred/usr/include”,但使用yocto版本2构建的工具链没有在“build/tmp/sysroot/imx6qsabred/usr/include”下搜索头文件,因此给出了错误信息

test.c:1:19: fatal error: stdio.h: No such file or directory
 #include <stdio.h>
                ^
compilation terminated.
您能帮忙吗,为什么使用yocto版本2构建的工具链没有在的build/tmp/sysroot/imx6qsabred/usr/include“下搜索头文件


在何处更改yocto中的工具链配置以包括上述搜索路径。

在较新版本中,基于OpenEmbedded的生成系统会破坏生成的交叉编译器中的内置sysroot定义。原因是我们希望检测不遵守交叉编译环境的应用程序


解决方案是不直接使用
${CROSS_COMPILE}-gcc
,而是使用
$CC
<代码>$CC,当由生成的SDK中的环境设置脚本设置时,将添加正确的sysroot参数

感谢您的回复,我无法理解“毒害生成的交叉编译器中的内置sysroot定义”的确切含义。我正在使用yocto交叉编译工具链来编译第三部分源代码。导出变量的第三方源,如所示@。你能告诉我在哪里需要用$CC替换“${CROSS_COMPILE}-gcc”吗。i、 在yocto元数据中或在编译第三方应用程序时。如果是这样的话,那么我必须付出$CC.By中毒,这意味着真正的sysroot被一个伪路径(不存在)所取代。因此,您必须将
--sysroot=…
添加到对
gcc
和朋友的所有调用中。在您的情况下,
$TARGET\u CC
是错误的,应该被替换为
TARGET\u CC=$CC
(或者类似的东西,具体取决于生成文件和构建系统)。在我的场景中,Makefile导出TARGET\u CC变量,Makefile在内部使用忍者构建系统进行构建。我曾经尝试过头文件使用-I选项,库使用-L选项,它修复了一些编译问题,但对于库的一些链接问题仍然失败。你能指导我如何避免中毒,这样交叉编译的工具链将具有与我最初发布的“yocto version1”中交叉编译的工具链相似的配置。看看
$CC
被设置为什么。这将为您提供一个关于需要设置哪些参数的线索。最好的方法是,如果您可以避免
TARGET\u CC
,并且忍者只使用
CC
。如果您查看最新粘贴箱中的路径,您会发现有些路径以
/not/exist/
开头。那些是假的路径。如果在为SDK寻找安装脚本之后查看$CC`会发现有一个参数
-sysroot=对应于它们的安装位置。在第一个粘贴箱中,将
TARGET_CC
的定义替换为<代码>目标\u CC=$CC
test.c:1:19: fatal error: stdio.h: No such file or directory
 #include <stdio.h>
                ^
compilation terminated.