同一个文件GCC每次编译出来的二进制文件都一样的吗?

ocean1002 2014-06-24 12:34:32
如果所有CPP文件都不变动,重新编译整个工程,最后生成的二进制可执行文件是一模一样的吗?[我用二进制比较工具比较了可执行文件,结果一模样]


生成的文件跟什么有关?机器?时间?

如果每次生成的文件都一模样的话,那么就不用像windows下的vc那样每次发布程序还要保留对应的PDB了,只要保留一模样的源码就行了?
...全文
923 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhxianbin 2014-06-24
  • 打赏
  • 举报
回复
第一个问题,既然变化了,二进制应该是变化的,如果只是时间变化了(如 touch 文件),二进制可能是不变的,自己可以测试一下 第二个问题可以 google “release core 调试”,列出几个 http://www.cnblogs.com/np10/archive/2013/01/24/2875573.html http://blog.csdn.net/sky_qing/article/details/8556128 http://www.cnblogs.com/aHuner/p/3316613.html
ocean1002 2014-06-24
  • 打赏
  • 举报
回复
引用 3 楼 mymtom 的回复:
这要看你的程序怎么写的啦
版主精通啊! 今早找了个稍大的工程试验了下。同一台机子,每次编译出来的二进制可执行文件还真是不会变动。这和windows有很大差别。 不知道为何这么设计
ocean1002 2014-06-24
  • 打赏
  • 举报
回复
引用 2 楼 zhxianbin 的回复:
二进制是否一摸一样没试过,如楼上所说,没变化,make是不会重新编译的,楼主有兴趣可以试试比较一下 Linux 确实不需要类似 PDB 的文件
第一个问题回复:我指的是有变化的情况下。 第二个问题回复:为什么不需要PDB?你们都是直接发布-G编译出来的DEBUG版本的?如果发布的是release版本,那么产生core文件,没调试符号表,怎么处理?
mymtom 2014-06-24
  • 打赏
  • 举报
回复

#include <stdio.h>

static const char compile_time[] = __DATE__ " "  __TIME__;
int
main(int argc, char *argv[])
{

        printf("compile_time: %s\n", compile_time);

        return 0;
}
mymtom 2014-06-24
  • 打赏
  • 举报
回复
这要看你的程序怎么写的啦
zhxianbin 2014-06-24
  • 打赏
  • 举报
回复
二进制是否一摸一样没试过,如楼上所说,没变化,make是不会重新编译的,楼主有兴趣可以试试比较一下 Linux 确实不需要类似 PDB 的文件
testoftesttest 2014-06-24
  • 打赏
  • 举报
回复
你写makefile编译的话,如果目标二进制文件存在,且二进制文件对应的源码没有更新,不会重新生成新二进制文件的

23,209

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧