今天有小伙伴向老wu咨询了个Capture 16.6的启动异常问题,如下图所示
这个问题老wu之前也有遇到过,只是当时没有找到造成该异常的真正原因,所以直接使用了重装操作系统大法解决了。今天再次面对这个启动异常的问题,老wu建议其尝试了清空Spb_data目录,卸载VC 2005运行库之后重装Cadence SPB 自带的VC 2005运行库等修复方法,但启动异常问题依然存在。
如果采用重装操作系统大法肯定是能解决问题,但重装完操作系统之后又要重装许多应用软件,也是挺折腾人的事情,所以觉得有必要花时间分析一下,彻底搞定这个启动异常的问题。
该排查的地方也都排查过了,只能是先跟踪下capture的启动过程,看下都调用了哪些配置文件和dll,看看能不能找到些线索。
果然发现了问题点,16.6的Capture.exe 去调用了17.4的dll,所以造成了启动异常。
问题根源找到了,那解决思路就清晰了,Cadence程序的相关dll文件路径是在环境变量里设置的,应该是PATH的读取优先级问题。PATH中的dll读取策略是从PATH中配置的路径头部开始读取,读取到同名的dll文件之后就不会再继续往后读取了,所以这里先把17.4的dll路径往下移降低其读取优先级,将ROOT%对应的路径排在前边即可。
总结一下,这个启动异常的问题是同时安装了多个版本的Cadence SPB造成的,如果先装了高版本的SPB如17.4再装16.6应该不会有问题,而如果先装的16.6后装的高版本,则后装的Cadence相关的库路径会在PATH里排在前边(读取优先级更高),造成16.6读取到了高版本的dll文件所以加载出错了。
另一个常见的多版本共存的问题也是先装16.6后装17.4造成的,如下图所示的cdn_xxx开头的错误。
这是因为后装的高版本Cadence SPB修改了ROOT%这个环境变量,指向了高版的SPB的安装路径造成16.6启动读取dll文件出现版本异常,此时只需手动修改环境变量CDSROOT,指向16.6的安装后的路径即可,如下图所示
还有一个非常常见的问题是16.6的VC 2005 运行库造成的问题,如下图所示
这个只需卸载系统里现有的VC 2005的运行库后重新安装16.6自带的运行库即可。
Cadence 16.6的VC 2005运行库在16.6的安装后的路径『SPB_16.6 ools\msbase』下,vcredist_x86.exe和vcredist_x64.exe都装上即可。