vc2012发布版本遇到启动错误

VC 2012 Release Build encounter startup error

本文关键字:遇到 启动 错误 版本 布版本 vc2012      更新时间:2023-10-16

我正在构建一个纯Win32程序(没有clr或任何汇编)由VC 2012 (VC 2012 (VC11)作为我的编译器)。它使用boost 1.58, wxWidget 3.0.2系列,gsl 1.8, jsoncpp, Open CV 2.4.10等…开发盒运行的是Win7 64bit。我希望它是一个单一的可执行文件,能够在win7 32/64上运行,所以我用相同的VC 2012自己构建了所有上述包作为库。(谢谢cmake)…

它在开发箱上工作得很好,但在只安装VC再分发包的干净的开发箱上就不行。我得到了错误消息框,要求我使用sxstrace和事件日志中的消息有如下并排错误,我也尝试了sxstrace,得到了类似的错误。

"D:Releasexxxx.exe"。Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"。http://www.sstrac.exe http://www.sstrac.exe

我一直在到处找。All and answers简单地说,我应该为所有库使用所有发布版本。是的,这是真的,如果我不这样做,我就不可能在一开始就拥有单个可执行文件。它将无法连接。(我从犯了很多错误中学到了这一点)我在我的程序中尝试了MD或MT构建(而不是将它们混合在一起)。他们是分开测试的。两种模式都有效。同样的错误仍然存在。我还安装了很多VC2008 9.0.21022, -.30729.17, -30729.4148, -30729.6161, VC 2010 10.0.40219, VC 2012 11.0.61030 (x86/x64)

我真的不明白。它是由VC 2012制作的纯win32版本。为什么它需要VC90调试dll?

我真的很感激如果有人能给我更精确的建议,关于如何解决,甚至确定在哪里,什么是错误的代码或我构建的库。

我建议您使用以下工具:Dependency walker。

通过在PC上加载你的可执行文件(它工作的地方),你应该找出它使用的所有dll,从而发现你的项目所依赖的(中等大小的)库列表中隐藏的依赖项(以及它们的依赖项)。

这将帮助您指出您的PC上有但新安装的机器上没有的dll。

一个纯粹的Win32版本构建不应该依赖于DEBUG CRT dll,这是肯定的。唯一需要控制的项目设置基本上是MT/MD("运行时库")设置。你想要MT.

我猜你在源代码的某个地方引用了Debug CRT dll(例如,其中一个库需要将其链接在任何原因,可能是因为有#define DEBUG或其他东西,从而覆盖项目设置。

您可以尝试在源代码中搜索#pragma comment(lib, ...bla-bla-bla...)

这是我自己解决的。这个项目是关于迁移一个大型遗留项目的。所以有一个非常小的库由VC90构建没有源代码。所以做这份工作的关键是做一个注重细节的人。