112得票3回答
为什么在gcc中只改变注释的两个程序二进制文件不完全匹配?

我创建了两个C程序 程序1int main() { } 程序 2int main() { //Some Harmless comments } AFAIK,编译时编译器(gcc)应忽略注释和冗余空格,因此输出应该是相似的。但是当我检查输出二进制文件的md5值时,它们不匹配。我还尝试了使用...

36得票4回答
为什么重新编译时二进制输出不相等?

我正在使用一个构建脚本来编译多个C#项目。二进制输出被复制到一个结果文件夹中,覆盖先前版本的文件,然后添加/提交到Subversion。 我注意到即使在没有任何源代码或环境变化的情况下,编译的二进制输出也是不同的。这怎么可能?难道相同的输入不应该得到完全相同的二进制结果吗? 我没有故意在任...

30得票7回答
判断.NET程序集是否来自同一源代码

有没有办法比较两个.NET程序集以确定它们是否是从“相同”的源文件构建的? 我知道有一些差异工具可用,例如Reflector的插件,但我不想在GUI中查看差异,我只想自动比较一组二进制文件,以查看它们是否是从相同(或等效)的源文件构建的。我了解到多个不同的源文件可能会产生相同的IL,并意识到...

20得票6回答
如何在重新构建C#应用程序时始终生成字节级别相同的.exe文件?

首先,让我简单介绍一下为什么我提出这个问题: 我目前在从事严格受监管的行业,因此我们的代码受到官方测试机构的严密审核。这些测试机构希望能够构建代码并生成一个完全相同的 .exe 或 .dll 文件(显然不更改任何代码!)。他们检查所创建的可执行文件的 MD5 和 SHA1 值以确保其相同。 ...

18得票1回答
NuGet锁定文件在使用--locked-mode恢复时失败

几年前,Roslyn给我们带来了确定性构建。 随着NuGet锁定文件的添加,我们终于可以有保证的可重复构建。 我正在查看文档,文档中说我可以使用以下命令进行选择: --use-lock-file Bootstraps use of lock file for a project. You...

13得票6回答
为什么C#针对相同的源代码生成不同的可执行文件?

每次重新编译我们的C#应用程序后,我们得到的EXE文件都具有不同的MD5签名。我们是在同一台机器上、仅几分钟之间进行重新编译的。为什么相同的源代码不能产生相同的输出?有没有办法解决这个问题?

12得票3回答
如何存储CMake构建设置

在尝试构建使用CMake的项目时,通常需要启用/禁用许多开关。 如何存储某个用户所做的构建设置,以使得在另一台机器上能够重现构建?是否有一些导出功能,或者你只需复制构建(缓存)文件夹?

12得票5回答
为什么同一个项目在不同的开发者电脑上生成的EXE文件不同?

我和我的团队正在开发一个VC++ 6项目。我们使用相同的代码库(使用版本控制系统),所有编译器/链接器/环境设置(包括包含目录顺序)都是完全相同的,就我们所知。当然,我们使用相同的VC++版本和服务包(VC6 SP6)。 问题在于,每个人构建的EXE略有不同。 我知道每次在同一台计算机上构...

9得票4回答
比较生成的可执行文件是否相等

我需要比较两个可执行文件和/或共享对象,它们是使用相同的编译器/标志编译的,并验证它们没有发生更改。我们在受监管的环境中工作,因此对于测试目的,能够隔离可执行文件的哪些部分发生了变化将非常有用。 使用MD5校验和/哈希值无法正常工作,因为头信息包含有关文件的信息。 是否有人知道一种程序或方...

7得票3回答
Java 8 编译器能否被强制创建可重复的类文件?

我的雇主有一个需求,需要使Java构建能够完全一致。我知道由于归档顺序和时间戳等原因,制作可复制的JAR文件存在困难,但现在我只是讨论类文件。 我在Mac和Linux上使用Java 8u65编译了相同代码的版本。这两个版本的类文件二进制上是不同的。这两个类都反编译回了相同的源代码;要看到差异...