因为项目需要,同时开发了Linux/Windows版本的程序,后面在实际测试过程中,发现两个版本之间的体现出来的行为有些不一致,大致情况如下:
1、Linux下代码能编译通过,Windows下编译通过
2、Linux下程序功能正常,Linux程序功能不正确
#配置库使用svn,两个系统使用同一份代码
后面经过逐步定位,发现问题出现在中文注释上,再进一步发现时跨平台下end-of-line解释不同造成
实际上,在不同系统下,行尾符的解释不同:
如:Unix每行结尾为’\n‘,Windows系统每行结尾是“\r\n”, Mac系统每行结尾是‘\r‘
由上可知,Linux下的eol在Windows下会解释为回车+换行,而在Linux下只会是换行
为了解决此问题,svn 专门提供了一个 svn:eol-style 这个 property。只要将 svn:eol-style 设置为 native,每次 checkout,svn 会自动将 eol 转换为当前系统的默认格式
具体命令为:svn propset svn:eol-style native file/dir [-R 递归]
另外Linux下也提供了两个命令来解决这个问题:dos2unix + unix2dos,使用都很简单,具体可参考man描述
关于跨平台下end-of-line问题
时间: 2024-10-28 06:15:44