VS2005 编译的 ITK 程序在其它机器上运行问题

      刚编译安装好 ITK,过几天就要讨论班,需要演示。可是问题出现了,自己已经编译好的ITK程序无法在老师的那台公用笔记本上运行,才想起这台机器上没有VS2005,但这台机器古老的很,病毒无数,有没有空间,实在烦的很。

      用命令行方式运行,提示:
     “系统无法执行指定的程序”
      直接双击运行,提示:
     “由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”
      以前常使用VC6,只不过会提示说找不到“***.dll”,把需要的dll拷贝到目标机器就可以正常运行了。而VS2005整个编译器框架重新设计了,不会提示缺少哪些dll,这真是比较闹人。

      VS2005 编译好的程序在其它没装 VS2005 的机器上运行,如下办法:

  •       1.将程序编译成 Release 版本
  •          一般机器上都已经安装有 Microsoft Visual C++ 2005 Redistributable,或者 VS2008 的,
  • 2008 向下兼容,这样的话可以正常运行。否则有两种办法:
  •         1) 到微软官方下载 Microsoft Visual C++ 2005 SP1 Redistributable Package (x86),
  •               安装后便可以正常运行,这样一劳永逸。
  •         2)在自己的机器上拷贝目录中
  •          ../Microsoft Visual Studio 8.0/VC/redist/x86/Microsoft.VC80.CRT 中的:

             msvcm80d.dll         msvcp80d.dll
             msvcr80d.dll           Microsoft.VC80.CRT.manifest

             几个文件到可执行文件所在目录即可。

             更简便的方法的把 Microsoft.VC80.CRT 整个目录拷贝到 可执行文件 所在目录即可。

             如果你的程序用到的 MFC,则需要拷贝 Microsoft.VC80.MFC 目录,其它同样。

         2.如果你的程序是 debug 版本,那么同上面 2)方法一样,不过要拷贝的文件在:

            D:/Program Files/Microsoft Visual Studio 9.0/VC/redist/Debug_NonRedist/x86 中

         3.另一个比较郁闷的问题

          一般C++,MFC程序,可以编译为静态链接,这样不用拷贝 VC 运行库就可以在目标机器上运行,

  •      如下设置,debug, release 同样: 

             右键点击工程:Property->C/C++->Code Generation->Runtime Library ->Multi-threaded Debug(MTd)、release:Multi-threaded(MT)
            默认为动态链接:Multi-threaded Debug DLL(MDd)、release:Multi-threaded DLL(MD)
            如果使用 MFC,则需要设置 MFC 的链接: Configuration Property->General->Project Defaults->Use of MFC中设置静态,或动态链接.

            但是,对于使用 ITK 库编写的程序,就会有问题,如果选择了静态链接,则在编译过程中会出现库冲突 LINK2005 错误,主要原因我想是这样的: 在编译 ITK 的时候,生成的 ITK 库同样使用了 VC 库,而且为动态链接;而自己的 ITK 程序则使用静态链接,这就出现了冲突,所以只能使用动态链接。

             本来想验证一下,但是 ITK 的工程实在太多了,一个一个修改实在麻烦的很,而且自己的程序中可能会用到许多 ITK 库,所以如果将 ITK 编译为静态链接,这样一个小程序体积也会非常的大。

            4.但我碰到一个更闹人的问题,就是无论如何都无法在那台乱笔记本上正常执行, VC 运行库都已经拷贝完整,而且我已经在多台电脑上测试过,包括自己用虚拟机新建的机器,没有装VS2005,都没有任何问题。

              但是,在这台笔记本上就出现了问题,不是不能运行,而是运行过程中出现了问题,因为如果不拷贝相应 DLL,就会出现像上面“系统无法执行指定的程序”一样的问题。拷贝了相应 DLL 后,因为我的程序需要几个参数,不带参数时,会提示缺少参数;加上相应的参数后,程序经过几十秒后,就弹出一个对话框,“XXXXX.exe 遇到问题需要问题关闭”,并提示调试,同时生成一个错误报告。这个错误非常像平时用的一些软件在运行过程中突然出现的崩溃。但是我编译的程序是 ITK 中提供的例子,是已经经过测试没有问题的,而且我自己也在其它多台电脑上进行了测试,都正常,唯独这台乱电脑。难道真的是程序的问题,可是程序并没有执行什么大的任务,只是非常简单的任务而已。也许是电脑自己的问题,毕竟这台电脑已经是古董了,而且问题多多。

             错误报告看不懂,是个 XML 文件,没有什么描述性语句,等那天碰到高人再解决吧,估计重装一下电脑肯定没问题, 可我实在是想搞明白这个问题的原因,头疼!!!

             

        

       

            

  •      

你可能感兴趣的:(VS2005 编译的 ITK 程序在其它机器上运行问题)