2011-08-11 160 views
5

我试图编译一个简单的32位Hello World应用程序,它使用Visual Studio 2010在Windows 7全新安装的64位机器上用C编写。安装Visual Studio后,我还安装了“Windows SDK for Windows 7和.NET Framework 4”。 我构建了选择“Win32”作为平台的应用程序。它适用于Windows 7,但如果我跑我的32位机与Windows XP专业版的应用程序(新鲜也是这个安装,无需软件和服务包)似乎不工作收到此错误:在64位机器上使用Visual Studio编译32位应用程序

"This application has failed to start because msvcr100.dll was not found" 

如果可以Dependency Walker中检测到2个错误(详见链接的图片)有用:

"Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module." 
"Error: Modules with different CPU types were found." 

http://img820.imageshack.us/img820/4725/errordp.png(图)

我怎样才能解决呢?谢谢!

回答

2

不要相信依赖沃克在这...它清楚地显示您的exe是32位。你的问题是VC可再发行组件,即CRT dll - 在你的VS安装中寻找vcredist_x86.exe。您应该在运行应用程序之前运行它。

另一种选择是静态连接CRT。请参阅/MT option。将使你的EXE更大,但保存vcredist的东西。

+0

我设置了/ MT选项,但是这次我得到了“程序入口点decodepointer不能位于动态链接库kernel32.dll”为什么? – mt22

+0

@Lorenzo,DecodePointer从XP SP2开始支持。用/ MT编译只会让你更进一步,到这是你的问题的阶段......动态链接会导致同样的问题。可以[编译为XP的基本版本](http://msdn.microsoft.com/en-us/library/aa383745(v = vs.85).aspx#setting_winver_or__win32_winnt)或更新XP。 – eran

+0

好的,谢谢@eran,另一个小问题:为什么我不必信任Dependency Walker这样的案例?那些错误意味着什么? – mt22

2

这里的问题是Windows XP机器上缺少编译程序使用的C运行时。默认情况下,Visual Studio 2010将默认使用10.0(msvcr100.dll)运行时,该运行时在XP上不可用。您需要在您的机器上手动部署C运行时才能运行程序。

您可能需要阅读下列MSDN文章,其中讨论了各地部署与Visual Studio构建C应用程序的问题,2010

可能有额外的工作六十四分之三十二问题,但这似乎是主要问题

1

有关运行时库的答案是正确的。另一种可能的解决方案是链接到静态运行时库而不是DLL版本。通过这种方式,您可以构建一个可执行文件,您可以将其放到任何机器上,而无需额外部署麻烦

这是一个权衡,但是,不了解更多关于你的情况,这可能是值得考虑的。

相关问题