【问题标题】:If the same code is built at different folders using arm-poky-linux-gnueabi-gcc, the resulting binary will have different contents如果使用 arm-poky-linux-gnueabi-gcc 在不同文件夹中构建相同的代码,则生成的二进制文件将具有不同的内容
【发布时间】:2018-10-14 22:07:12
【问题描述】:

我有一个源代码,我正在尝试交叉编译 armv7 架构,它正在编译并生成二进制文件。当我在不同的目录中编译相同的代码时,生成的二进制文件与前一个不同。 为什么我会得到这种差异?不仅是二进制文件,目标文件也发生了变化。 我正在使用 arm-poky-linux-gnueabi-gcc。我使用以下命令创建的工具链 "source /opt/fsl-imx-x1​​1/4.1.15.1.1/environment...." 等工具链也在导出编译器设置 (CLFAGS, LDFLAGS) 。

【问题讨论】:

  • 如果您使用 yocto 生成 sdk 并按预期安装它,您应该能够交叉编译您的源代码。当你说in a different directory时,它也意味着不同的终端?
  • 是的。不同的终端。如果我尝试在不同的文件夹中编译相同的代码,则会生成二进制文件,但如果我比较二进制文件,两者都是不同的。为什么这些变得不同?
  • 因为在 source 环境时,只能在执行命令的终端中进行交叉编译。如果您切换到另一个终端,则必须再次执行该命令。否则,你为你的主机编译源代码。
  • 是的,你是对的,我也在做同样的事情。
  • 使用 readelf,(readlef -a -W) 我创建了一个报告,列出了两个版本的内容并进行了比较(使用 Beyond compare)。这表明两个二进制文件(ELF 格式)的构建 ID 不同。为什么在我进行交叉编译时这些 Build -ID 会变得不同。

标签: makefile cross-compiling yocto openembedded linux-toolchain


【解决方案1】:

这与交叉编译或 Yocto 无关,只是因为二进制文件将嵌入构建路径、时间戳和其他发生变化的东西。如果您想要相同的二进制文件,那么您需要阅读可重现的构建:

https://reproducible-builds.org https://wiki.yoctoproject.org/wiki/Reproducible_Builds

【讨论】:

  • 但是为什么当我在主机 PC(Linux with GCC)上编译时没有发生这种差异。
  • 因为你变化不够或者你很幸运。二进制文件包含构建路径,这就是二进制文件发生变化的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 2011-02-27
相关资源
最近更新 更多