刚从齐鲁软件园回来,从下午五点一直折腾到现在,郁闷!可恶的Telelogic Logiscope v6.3。
客户使用的是Logiscope的最新版本6.3。他们的需求很简单,就想用TestChecker对Visual c++ 6.0创建的C代码做覆盖率分析,重点在MC/DC的覆盖。
我没有用过6.3,只是很早以前用过6.2。根据我以前使用Logiscope的经验,这应该是小菜一碟,very easy。打开Logiscope Studio,create C testchecker project,一步步,不到一分钟project创建成功。眼看已经要大功告成,快要结束战斗了,但没想到事与愿违,本应该是几分钟搞定的事情却折腾了3个小时。
项目创建成功后,根据需要,配置了几个配置变量,主要是有关testchecker插装需要的头文件和库的路径,然后build,失败,大概的提示信息如下
msvcrt.lib(MSVCRT.dll) : error LNK2005: _sprintf already defined in LIBCD.lib(sprintf.obj)
......
LINK : warning LNK4098: defaultlib "msvcrt.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
看直接提示,意思是mscvrt.lib和libcd.lib定义的内容有冲突,建议使用/NODEFAULTLIB:library编译选项。这个问题可不怎么熟悉,赶紧google一下,的确是这样,要在link选项上增加/NODEFAULTLIB:库名。
那就先增加/NODEFAULTLIB:"MSVCRT.LIB"吧,rebuild,还是失败,提示大意是unresolved external symbol__imp__Localtime云云,有三个类似的提示呢。
看来MSVCRT.LIB中不光有冲突的内容,还有一些必需的信息。那就别忽略人家MSVCRT.LIB了,直接用/NODEFAULTLIB:"LIBCD.LIB"吧,再次build,结果出现好几十个unresolved external symbol,这么来看,LIBCD.LIB更重要,更不能忽视。
这怎么办呢?于是撇开Logiscope,直接用Visual C++ 6.0编译这些C代码,没问题,直接通过,而且什么都不用忽略。
纳闷了,Visual C++ 6.0使用的是cl.exe编译器,而Logiscope调用的也是cl,选项完全相同,因为Logiscope编译用的Makefile都是从Visual C++中export出来的。但为什么结果会不同呢?琢磨不透。
没办法,问题必须要解决,打开user manual吧,从创建开始,一步步,每个选项都没有漏过,没问题呀,完全没问题呀,为什么会这样呢?
不甘心,直接打开Logiscope自带的例程,什么都不改动,直接在Logiscope中build,结果同样出错,NND,自带的例程怎么都编译不过去呢?
时间一点点的过去,我又上网看了更多的类似的编译信息,明确了我第一次用/NODEFAULTLIB:"MSVCRT.LIB"是完全正确的。坚定了思路,重新开始,细心留意build的出错信息,发现前面一大堆警告后面,跟着的错误竟然是vlgtc.lib的。你要知道vlgtc.lib可是Logiscope安装包提供的、用于代码插装的库呀。它怎么能出错呢?
继续google,没有任何有价值的信息。
时间已经过了快三个小时,我几乎要放弃了。最后一个想法,怀疑vlgtc.lib有问题。最后一搏,用我电脑上的Logiscope 6.2的35K 大小的vlgtc.lib来替代6.3中38K的库 link,行就行,不行今天也只能这样了。
我KAO,请原谅我不小心喊出的这句话。竟然一次build通过了。
然后打开testchecker,新建测试用例,执行,观察覆盖率,一切都非常正常。
没想到今天三个小时栽到logiscope自带的库文件上了。
再次联想到早上安装server端的license,使用的是Telelogic自带的setup程序,安装顺利完成后,发现license服务根本起不来,打开lmtools,其中lmgrd.exe的路径竟然给搞错了。这可是Telelogic的setup自动设置的啊。
6.3版本还太不成熟,我估计Telelogic在发布之前肯定没有对这个库做过完整的测试,否则这么低级的问题怎么都不能发现。
可恶的Telelogic Logiscope 6.3。
继续不看好Logiscope的前景:
1 Logiscope原是法国Verilog公司的产品,在发展到4.5的时候被瑞典Telelogic收购,随后2002年左右发布了5.0。
2 2004年前后发布了Logiscope 6.0,到现在的2008年,最新版本是不成熟的6.3。也就是说,Telelogic在4年的时间里没有发布过一个Logiscope的大版本。
3 或许人家早就意识到要被IBM收购了。到今天为止,Telelogic已经成为IBM的一员,或许在不久的将来,Logiscope也将正式被并入Rational的体系中,到那时,你将再也买不到曾经风光一时的Logiscope了。