在Linux和Windows上构建STM32CubeIDE项目时二进制输出不一致



我正面临一个问题,我的STM32CubeIDE项目在Linux和Windows上构建的二进制输出不一致。我已经在两个平台上安装了STM32CubeIDE版本1.6.1和固定的工具链:用于STM32的GNU工具(7-2018-q2-update)。通过比较makefile文件,我发现它们是匹配的,但是生成的二进制文件却不匹配。

你能建议我采取哪些步骤来确保两个平台上的二进制输出一致吗?此外,我应该比较哪些文件来解决问题?

更新:如果我在两台不同的Windows机器上构建相同的源代码,我将得到相同的二进制文件。

更新2:我只使用CubeMX生成的代码创建了一个基本的stm32项目。我观察到,当我在Windows和Linux上编译项目时,二进制输出是相同的。这表明工具链运行正常,观察到的任何差异都可能是由于我自己的源代码。

一般来说,您所希望的是不可能与标准的嵌入式工具。

启用可复制构建是开放源代码工具链中一个活跃的开发领域。我个人已经放弃了在嵌入式项目中使用它(至少现在是这样)。

产生非确定性的许多原因和应对措施在相关问题如何使用g++生成确定性二进制输出中列出。

我发现一个常见的问题是不同平台上的链接顺序不同。而且,一旦你改变链接顺序,你就会引入不同数量的填充,所以即使是大小也不会保持完全相同。