我正在尝试在 ubuntu 14.04 上为 windows 编译 putty。从这里获取源代码:
http://the.earth.li/~sgtatham/putty/latest/putty-0.63.tar.gz
这是我在出现错误之前所做的:
[17:45:20][~/putty-0.63]$ perl mkfiles.pl
[17:46:42][~/putty-0.63]$ cd windows/
[17:46:44][~/putty-0.63/windows]$ make VER="-DSNAPSHOT=$(date '+%Y-%m-%d') -DSVN_REV='$(svnversion)' -DMODIFIED" TOOLPATH=i586-mingw32msvc- -f Makefile.cyg putty.exe
.
.
.
i586-mingw32msvc-windres --define WIN32=1 --define _WIN32=1 --define WINVER=0x0400 --define SNAPSHOT=2015-02-18 --define SVN_REV='Unversioned directory' --define MODIFIED ../windows/putty.rc -o putty.res.o
i586-mingw32msvc-gcc -mno-cygwin -Wall -O2 -D_WINDOWS -DDEBUG -DWIN32S_COMPAT -D_NO_OLDNAMES -DNO_MULTIMON -DNO_HTMLHELP -DNO_SECUREZEROMEMORY -I.././ -I../charset/ -I../windows/ -I../unix/ -I../macosx/ -DSECURITY_WIN32 -D_WIN32_IE=0x0500 -DWINVER=0x0500 -D_WIN32_WINDOWS=0x0410 -D_WIN32_WINNT=0x0500 -DSNAPSHOT=2015-02-18 -DSVN_REV='Unversioned directory' -DMODIFIED -c ../version.c
../version.c:63: warning: division by zero
../version.c:63: error: enumerator value for גvorpal_swordג is not an integer constant
make: *** [version.o] Error 1
我能做些什么呢?
答案1
SNAPSHOT
和的值SVN_REV
用于组成sshver
类似的值:
sshver = "PuTTY-Snapshot-SNAPSHOT:rSVN_REV"
和
SNAPSHOT=2015-02-18
SVN_REV=Unversioned directory
这使得
sshver = "PuTTY-Snapshot-2015-02-18:rUnversioned directory"
什么违反了最后一行的断言:version.c
长度sshver
最多为 40 个字符。
/*
* SSH local version string MUST be under 40 characters. Here's a
* compile time assertion to verify this.
*/
enum { vorpal_sword = 1 / (sizeof(sshver) <= 40) };
他们显然没有针对“未版本化目录”场景测试其构建。
不确定“未版本化目录”来自哪里(它不在源代码中)。
解决方案:
- 将字符串“未版本化目录”(无论其来自哪里)修改为更短的内容。
- 尝试使用“开发”源代码,因为他们从 0.63 版开始就完全重构了这段代码,可能修复了这个问题。
请参阅https://git.tartarus.org/?p=simon/putty.git;a=commit;h=4d8782e74fed043fdf549718f99494622fe9e79b