许多新人在XP下配置Symbian开发环境,在编译的时候都会遇到这样的问题:
perl - S epocrc.pl - I " ....................SYMBIAN.1SERIES60SERIES60EXHELLOWORLDGROUP " - I " ....................SYMBIAN.1SERIES60SERIES60EXHELLOWORLDINC " - I - - I " ....................EPOC32INCLUDE " - DLANGUAGE
_SC - u " ....................SYMBIAN.1SERIES60SERIES60EXHELLOWORLDGROUPHELLOWORLD.RSS " - o " EPOC32RELEASEWINSUDEBZSYSTEMAPPSHELLOWORLDHELLOWORLD.rSC " - h " ....................SYMBIAN.1SERIES60SERIES60EXHELLOWORLD
GROUPHELLOWORLD.rs ~ " -t " EPOC32BUILDSYMBIAN 6.1 SERIES60SERIES60EXHELLOWORLDGROUPHELLOWORLDWINSUDEB "
* Can ' t execute cpp at C:Symbian.1Sharedepoc32 ools/epocrc.pl line 161.
NMAKE : fatal error U1077: ' perl ' : return code ' 0x9 '
Stop.
Error executing c:windowssystem32cmd.exe.
HELLOWORLD.APP - 1 error(s), 0 warning(s)
我在网上搜索了很多关于这个问题的讨论,但往往讨论的最后都没有得到一个解决办法。最后还是在nokia的论坛上找到了答案。(不过找答案的过程中听到了许多对nokia sdk的骂声,恩……C++的东西API乱七八糟没有条理我还是有一点点切身感受的。相比而言,java简直是天堂。)
首先你要保证你的sdk与工程文件在同一个分区下,因为sdk是不区分盘符的。最好把perl啊vc啊sdk都装在C盘,工程也建立在C盘,sdk目录不能带空格。
问题分析的原贴在这里:http://discussion.forum.nokia.com/forum/showthread.php?t=20556(作者“give the SDK on Windows XP two thumbs down.”,可见其仇恨=。=)
打开epocrc.pl文件,第155行~第161行是这样的。
$cpp_spec .= "</"$sourcefile/"";
open CPP, "$cpp_spec |" or die "* Can't execute cpp";
perl在第161行引用cpp_spec这个变量时发现这个变量是</"$sourcefile/",然后程序就在这里出错了。
貌似Perl安装在XP下时,一旦语句中出现'<'或者'>'就会出现这样的问题,但是在NT下就会运行的非常好。
所以最终的解决方法非常简单,把第156行的
$cpp_spec .= "</"$sourcefile/"";
改成
$cpp_spec .= "/"$sourcefile/"";
就没有问题了
你不用尝试着一遍又一遍的重装开发环境甚至重装操作系统了:)