RT(Run Time) manifest version 9.0.30729.6161编译出来的dll不能在其他机器上运行

起因:

程序工程设置了_BIND_TO_CURRENT_VCLIBS_VERSION,打包,到测试机上运行,一切OK。build server上Run time版本号为9.0.30729.4148。

测试需要,我在我机器上build了A.dll,将其拷贝到测试机器替换原来的dll。程序运行不起来,界面也不出来,查看log,发现是loadlibrary失败。

在我编译的机器上按照程序,用我自己build的dll替换安装目录下的dll,运行程序,ok。

解决:

进一步分析,发现我的机器上用的RT version 9.0.30729.6161。在网上找了6161的vcredist.exe的分发包,在测试机器上安装,运行程序,OK,成功了。

RT 9.0.30729.6161 下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=26368 (Microsoft Visual C++ 2008 Service Pack 1 Redistributable Package MFC Security Update)

分析:

A.dll的menifest里既有4148,又有6161。说明manifest里同时有两个版本是可行的。

插曲:

在我还没有找到解决方案前,同事建议将C:\Program Files\Microsoft Visual Studio 9.0\VC\include\crtassem.h里的#define _CRT_ASSEMBLY_VERSION "9.0.30729.6161"改成#define _CRT_ASSEMBLY_VERSION "9.0.30729.4148"。我试了,结果是不行,不确定是这样不行,还是我依赖的dll/lib库太多了,没有处理干净。

posted on 2014-10-24 14:34  阿彪  阅读(4351)  评论(0编辑  收藏  举报

导航