Makefile 如果使用armpokylinuxgnueabigcc在不同的文件夹中构建相同的代码,那么生成的二进制文件将具有不同的内容

Makefile 如果使用armpokylinuxgnueabigcc在不同的文件夹中构建相同的代码,那么生成的二进制文件将具有不同的内容,makefile,cross-compiling,yocto,openembedded,linux-toolchain,Makefile,Cross Compiling,Yocto,Openembedded,Linux Toolchain,我有一个源代码,我正在尝试为armv7架构交叉编译,它正在编译并生成二进制文件。当我在不同的目录中编译相同的代码时,生成的二进制文件与前一个不同。 为什么我会有这种不同?。不仅是二进制文件,对象文件也在改变。 我使用的是armpokylinuxgnueabigcc。我正在使用以下命令“source/opt/fsl-imx-x11/4.1.15.1.1/environment…”等创建工具链。工具链也正在导出编译器设置(CLFAGS、LDFLAGS) 这与交叉编译或Yocto无关,只是因为二进制文

我有一个源代码,我正在尝试为armv7架构交叉编译,它正在编译并生成二进制文件。当我在不同的目录中编译相同的代码时,生成的二进制文件与前一个不同。 为什么我会有这种不同?。不仅是二进制文件,对象文件也在改变。
我使用的是armpokylinuxgnueabigcc。我正在使用以下命令“source/opt/fsl-imx-x11/4.1.15.1.1/environment…”等创建工具链。工具链也正在导出编译器设置(CLFAGS、LDFLAGS)

这与交叉编译或Yocto无关,只是因为二进制文件将嵌入构建路径、时间戳和其他更改内容。如果您想要相同的二进制文件,则需要阅读可复制的构建:


如果您使用yocto生成sdk并按预期安装,您应该能够交叉编译源代码。当你在不同的目录中说
,它也意味着不同的终端?是的。不同的终端。如果我尝试在不同的文件夹中编译相同的代码,将生成二进制文件,但是如果我比较二进制文件,两者都是不同的。为什么它们会变得不同?因为当您为环境编写源代码时,您只能在执行命令的终端中进行交叉编译。如果您切换到另一个终端,您必须再次执行该命令。否则,您将编译主机的源代码。是的,您是正确的,我也在这样做。使用readelf,(readlef-a-W)我创建了一个报告,列出了两个版本的内容,并比较了(使用Beyond compare)。这表明两个二进制文件(ELF格式)的构建id是不同的。为什么我交叉编译时这些构建ID会变得不同。但是为什么我在主机PC上编译(使用GCC的Linux)时不会发生这种差异。因为您没有做足够的更改,或者您非常幸运。二进制文件包含构建路径,因此二进制文件会发生更改。