情景重现
2013年7月29日,我在Windows 7 x86 SP1中文专业版系统环境下使用Visual Studio 2005 SP1中文版编写应用程序。
编写完成后在Windows 7 x64 英文旗舰版系统环境下运行。
悲剧的事情粗现了!程序在启动的时候弹出了 0x0c150002 的错误提示。起初我并不知道是什么原因,根据以往的经验应该是编译出了问题。于是我将所有的dll与exe都用MT编译选项编译成了静态的模块。
结果运行时还是悲剧。
接下来查看Windows系统日志,发现程序运行时出现了SideBySide错误。
这里简单的介绍一下VC库的链接原理:
每一个VC库分为CRT、ATL、MFC等等,微软称之为“程序集”。通常情况下我们使用的是CRT库。那么CRT库其实也是有版本之分的。
以VC2005来看,它的CRT库分别有8.0.50727.42、8.0.50727.762、8.0.50727.1833、8.0.50727.4027、8.0.50727.4053、8.0.50727.4927、8.0.50727.4940、8.0.50727.6159这几个版本。
我们在实际的编译链接过程中VS会根据当前版本来决定使用哪一个,具体原理我还没有摸清楚,但估计是使用当前相匹配的程序集的最高版本进行链接。
那么这个程序在拿到其他计算机运行时,计算机根据其清单中的程序集版本寻找相应的库进行匹配,如果找不到就会反馈0x0c150002的SideBySide错误。
当我发现这个问题的时候,以为是我编译选项出错了。而事实上,这个东西与静态编译选项什么的无关。
相关文章
- 关于VC出现 0x0C150002 错误的原因以及解决方案
- sqlite3出现SQLITE_BUSY错误码的原因以及解决方法
- 关于使用jupyter notebook时报错error的原因以及解决方案
- 关于ST-Link烧录程序出现错误st link connection error的解决方案!
- 关于windows安装wsl,出现WslRegisterDistribution failed with error: 0x8007019e The Windows Subsystem错误的解决方案
- c++ std::sort函数调用经常出现的invalidate operator<错误原因以及解决方法
- 关于ArcGIS Engine10.4在vs中添加控件提示“您必须有许可证......使用此ActiveX控件”错误的解决方案以及资源分享
- 关于卸载SQL Server 2008出现0x84B40000错误提示的解决方案 - dudu
- 关于maya与max互导FBX出现错误的解决方案。
- 关于在网页拼接时出现:提示Uncaught SyntaxError: missing ) after argument list;错误的原因分析