我正在使用Code :: Blocks在Windows中开发C应用程序。当我构建应用程序时,它会按预期构建和运行。当我的同事构建它构建的应用程序时,但在运行时行为不正确。创建的exe文件也是不同的大小。 Code :: Blocks项目存储在subversion中,我们可以告诉他们两个人。
有人可以提出可能导致差异的原因吗?
答案 0 :(得分:1)
总结:
不同的编译器,甚至是不同的版本,可以解释不同大小的程序,但不会有不同的行为,除非存在严重的编译器错误,这是极不可能的。您可以要求编译器100%确定其版本(但是如果您使用GNU编译器,请尝试例如gcc --version
)
不同版本的静态库可以类似地解释不同大小的程序大小,但 通常不会导致不正确的行为。要将“尽可能地告诉”变为确定性,您和您的同事应该要么彻底安装这些库(来自相同的协定版本),要么比较校验和(例如{ {1}})。
如果您可以安全地排除同事计算机上恶意软件的可能性(这可以很好地解释这两种症状!),“不同大小的程序和不同/错误行为”组合的可能原因是你们其中一个人如果启用了一些优化选项或编译了不同的laguage标准,并且同时,则源包含标准不允许的代码(但可以容忍,可能带有警告)或触发未定义的行为。
总是使用md5sum
编译至少并修复编译器抱怨的任何内容,即使您认为这很愚蠢。总是。这可以防止99%的“有时奇怪的行为”类型的错误。实际上,编译器警告并不是一种烦恼,它们是一种帮助。
请注意,即使不是很明显,也可能会在两个不同的地方出现不同的构建选项。首先,项目文件可能已在本地更改,但未提交。只要在另一方没有提交冲突的版本,您将永远不会看到来自Subversion的警告。其次,您的同事可以在编译器首选项中设置一些全局选项。这些将应用于每个项目。
要排除不同构建设置的可能性,请将每台计算机上的构建日志保存到文本文件中,然后区分它们。