我正在构建VC 2012(VC 2012(VC11)作为我的编译器)的纯Win32程序(无clr或任何程序集)。它使用boost 1.58,wxWidget 3.0.2系列,gsl 1.8,jsoncpp,Open CV 2.4.10等......开发盒运行的是Win7 64bits。我希望它是一个单一的可执行文件,并且能够在Win 7 32/64上运行,所以我在同一个VC 2012中自己构建了所有上述软件包作为库。(感谢cmake)......
它在开发盒上运行良好,但不能在只安装VC再分发软件包的干净机器上运行。我收到错误消息框要求我使用sxstrace并且事件日志中的消息有如下所示的并排错误,我也尝试了sxstrace并得到了类似的错误。
“D:\ Release \ xxxx.exe”的启用内容产生失败。找不到依存组合Microsoft.VC90.DebugCRT,processorArchitecture =“x86”,publicKeyToken =“1fc8b3b9a1e18e3b”,type =“win32”,version = “9.0.21022.8”。请使用sxstrace.exe进行详细的诊断。
我一直在寻找。所有和答案只是说我应该为所有lib使用所有发布版本。是的,如果我不这样做,那我就不能在第一时间拥有单个可执行文件。它将无法链接。 (我通过犯了很多错误来学习它)我已经为我的程序尝试过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?
如果有人能够就如何解决甚至确定代码或我构建的lib的错误位置和错误给出更精确的建议,我将非常感激。
答案 0 :(得分:2)
我建议您使用以下工具:Dependency walker。
通过在PC上加载可执行文件(它工作的地方),您应该找到它使用的所有DLL,因此发现项目所依赖的(中型)库列表中的任何隐藏依赖项(以及它们的依赖项)
这可以帮助您指出PC上的DLL,但不能指出新安装的机器上的DLL。
答案 1 :(得分:0)
纯Win32发布版本不应该依赖于DEBUG CRT dll,这是肯定的。控制的唯一项目设置基本上是MT / MD(“运行时库”)设置。你想要MT。
我猜你在源代码中的某个地方引用了Debug CRT dll(例如,其中一个库要求它因任何原因被链接,可能是因为有#define DEBUG
或其他东西,因此覆盖了项目设置。
您可以尝试在源代码中搜索#pragma comment(lib, ...bla-bla-bla...)
。
答案 2 :(得分:0)
这是我自己解决的。该项目旨在迁移一个重要的遗留项目。所以VC90构建的lib很小,没有源代码。因此,做一个细节的人是做这种工作的关键。