Windows 8.1 项目的 Windows 10 Visual Studio 2013 生成错误

Windows 10 Visual Studio 2013 build error for Windows 8.1 project

本文关键字:Windows 2013 错误 Studio 项目 Visual      更新时间:2023-10-16

使用 VS2013 在Windows 10上构建win8.1项目时出错

'RAIG3D.Windows.exe' (Win32): Loaded 'C:WindowsSysWOW64mswsock.dll'. Symbols loaded.
Debug Assertion Failed!
Program: ...win8.1-universalDebugRAIG3D.WindowsAppXRAIG3D.Windows.exe
File: f:ddvctoolscrtcrtw32miscdbgheap.c
Line: 1424
Expression: _pFirstBlock == pHead

我在链接到项目的.dll中使用winsock2.h。它是一个自定义网络库,我试图编写。它在windows分支上

https://github.com/damorton/libsocket/tree/windows

该库适用于win32调试程序,但对于win8.1,它给出了上述错误

这不是构建错误,而是运行时错误。具体来说,一个断言已经触发。这是消息告诉您的内容:

调试断言失败!

刚刚执行了一段代码,它使用 assert 宏的某种变体来捕获可能的错误。它抓住了一个。这很好。更好的是,它会告诉您断言宏的触发位置

程序:。。。win8.1-universal\Debug\RAIG3D.Windows\AppX\RAIG3D.视窗.exe
File: f:\dd\vctools\crt\crtw32\misc\dbgheap.c
行: 1424

这是您的程序,但不是您的代码文件。因此,这不是您编写的断言,而是Microsoft开发人员放入其 C 运行时库例程的断言。具体来说,在dbgheap.c文件中,这表明它与调试堆有关,调试堆用于在调试版本中分配内存。

该消息还告诉您表达式是什么,结果意外错误,因此触发了断言:

表达式:_pFirstBlock == pHead

看起来两个应该相等的指针实际上并不相等。

如果按下弹出的消息框上的"重试"按钮,则可以使用调试器中断代码,并在上下文中查看有问题的代码行。您还将有一个完整的调用堆栈可供查看。

调用

堆栈有助于在调用触发此断言的库代码之前查看正在执行的代码行。此断言是 CRT 作者放入其内存分配例程中的内部一致性检查。如果你触发了它,你就在你的应用程序内部做了一些严重的错误。

如果我冒昧地猜测,在没有比我更多的信息的情况下,我猜你可能正在尝试混合引用不同版本的 CRT 的可执行文件和库。这是不支持的,可能会导致严重的问题。不同版本的 CRT 具有不同的对象大小、内存布局、静态变量等。你很幸运,这次它被一个断言抓住了。检查所有项目是否面向相同版本的 CRT,包括生成 DLL 和 LIB 的项目。从头开始进行完全重建,以确保它们都已更新。