vc2012发布版本遇到启动错误
VC 2012 Release Build encounter startup error
我正在构建一个纯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构建没有源代码。所以做这份工作的关键是做一个注重细节的人。
- 编译包含字符串的代码时遇到问题
- 如何创建一个空的全局类并在启动时实例化它
- 遇到新行时,有没有办法停止istream_iterator
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- 即使我读取了所有内容,在FIFO上打开的QSocketNotifier也会一直启动
- 在 for 循环中查找问题时遇到困难
- 使用 std::string () const 函数启动线程或未来
- 创建结构的数组时遇到分段错误
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 为什么我遇到分段错误?
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 这些是什么样的错误?即使我不在 Linux 上工作,我也遇到了 Linux 错误
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- 将向量作为类>(值)<向量启动和向量<类>[值]有什么区别
- 如何创建线程序列以按照启动顺序执行任务?
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- 为什么我在尝试模板时遇到视觉工作室C++错误
- 从静态初始化代码启动CUDA内核时遇到问题
- vc2012发布版本遇到启动错误