我正在为几个 C++ 项目使用 boost。我最近进行了升级(从 1.33.1 升级到 1.36,很快升级到 1.37),从那时起我就不能再运行任何调试版本了。
为确保不存在其他项目问题,我创建了一个最小测试项目,其中仅包含 boost.thread,并使用它来启动一种方法。可以启动发布构建,但不能启动调试构建,尽管Dependency Walker显示找到了所有必需的库(这也意味着在 SxS 目录中找到了所需的 MS Debug CRT)。
在启动时我只得到:
Die Anwendung konnte nicht Richtig initialisiert werden (0xc0150002)。Klicken Sie auf "OK", um die Anwendung zu beden。
这意味着“无法初始化应用程序”。互联网研究主要导致MS Office 安装问题,建议对 WinXP 进行修复。
那么,除了修复设置(我认为这在我谈论调试 dll 问题时无济于事)之外,还有什么想法吗?
啊,在我忘记之前:完全相同的源代码在构建机器上不会导致错误(即,可以注册 DLL,意味着执行)。所以这显然是一个安装问题,但是由于 DLL在那里,并且dependency-walker 找到了它,我还忘记了什么?
(编辑)好吧,我还没有解决我的问题,但感谢 deemok,我更进一步。为了减少误解,我在下面做一些澄清:
- 程序无法在开发者机器上运行
- 我正在使用已安装的 VS2005(这是一个 VC++8 项目)
- 我使用了来自BoostPro的 boost-setup ,编译了所有可能的构建版本,并仔细检查了它们是否存在(否则我在构建过程中已经遇到了链接器错误)。
- 我仔细检查了我能想到的 include/lib/bin 配置的任何角落——因为 boost 在 Windows 上使用自动链接,具有特殊的命名约定,构建或启动会失败,更容易理解错误信息。
- 我不能使用静态链接,因为 boost.thread 需要动态链接 DLL 项目(我可能会在这里搞砸,但由于这个问题似乎只发生在我的机器上,我不想搞砸这个,我确定助推器首先有理由将检查放在那里)
- 正如我写的那样,我检查了 Dependency Walker,它说一切都很好。
目前,它似乎是 boost-dll 中的一个错误(可能是不正确的 Manifest),将对其进行检查。