最近遇到了一个诡异的问题:将原来能编译通过,并且只改动了一丁点的代码,再传到Linux虚拟机上编译的时候,编译出错,而且是匪夷所思的错误。不得其解时,尝试了若干解决办法,包括大段大段地注释掉怀疑有问题的地方,但是最后把注释掉的代码全部放开的时候,仍然出错。于是到Linux下用Emacs查看源文件,非常吃惊:传上去的文件竟然与Windows下的文件不一样!
难道是上传的时候出错了吗?最后查出来的原因是:我用FTPRush(通过SFTP)来传送文件到Linux虚拟机里,尽管设置成了在任何情况下都将目标文件“覆盖”,但是仍然是类似于“续传”式的结果,即:在目标代码文件比较小的时候,本地文件多出来的最后那一部分代码就被FTPRush添加到了目标文件的末尾,使得括号或其他东西不匹配,使得编译通不过。
如果我先删除了目标文件,再传送过去,就没有这个问题了。
我用SSH Secure File Transfer Client就没有这个问题。可见,要当心SFTP客户端的续传问题,可能是我设置不当,表面看起来正确的设置,实际上是有问题的。