Windows 10 Visual Studio 2013 Windows 8.1 项目的构建错误
Windows 10 Visual Studio 2013 build error for Windows 8.1 project
我在 Windows 10
上使用 VS2013
构建 win8.1
项目时出错
'RAIG3D.Windows.exe' (Win32): Loaded 'C:\Windows\SysWOW64\mswsock.dll'. Symbols loaded.
Debug Assertion Failed!
Program: ...win8.1-universal\Debug\RAIG3D.Windows\AppX\RAIG3D.Windows.exe
File: f:\dd\vctools\crt\crtw32\misc\dbgheap.c
Line: 1424
Expression: _pFirstBlock == pHead
我在链接到项目的 .dll
中使用 winsock2.h
。它是我正在尝试编写的自定义网络库。它在 windows
分支
https://github.com/damorton/libsocket/tree/windows
这个库适用于 win32 调试程序,但对于 win8.1 会出现上述错误
这不是构建错误,而是 运行 时错误。具体来说,断言已触发。这就是消息告诉您的内容:
Debug Assertion Failed!
刚刚执行了一段代码,它使用 assert
宏的某些变体来捕获可能的错误。它抓住了一个。这很好。更好的是,它会告诉您 where 触发了断言宏:
Program: ...win8.1-universal\Debug\RAIG3D.Windows\AppX\RAIG3D.Windows.exe
File: f:\dd\vctools\crt\crtw32\misc\dbgheap.c
Line: 1424
那是你的程序,但不是你的代码文件。所以这不是您编写的断言,它是 Microsoft 开发人员放入其 C 运行-time 库例程中的断言。具体来说,在 dbgheap.c
文件中,这表明它与调试堆有关,调试堆用于在调试构建中分配内存。
该消息还告诉您结果意外为假并因此触发断言的表达式是什么:
Expression: _pFirstBlock == pHead
看起来应该相等的两个指针实际上不相等。
如果您按下弹出消息框上的 "Retry" 按钮,您将能够使用调试器进入代码并在上下文中查看有问题的代码行。您还可以查看完整的调用堆栈。
调用堆栈有助于在您调入触发此断言的库代码之前查看您的 代码的哪一行正在执行。此断言是 CRT 作者放入其内存分配例程中的内部一致性检查。如果您触发了它,则说明您的应用程序内部出现了严重错误。
如果我在没有比我更多的可用信息的情况下冒险猜测,我猜您可能试图混合引用不同版本 CRT 的可执行文件和库。这是不受支持的,可能会导致严重的问题。不同版本的 CRT 有不同的对象大小、内存布局、静态变量等。这次你很幸运,它被断言捕获了。检查您的 所有 项目是否针对相同版本的 CRT,包括生成 DLL 和 LIB 的项目。从头开始进行全面重建,以确保它们都已更新。
我在 Windows 10
上使用 VS2013
win8.1
项目时出错
'RAIG3D.Windows.exe' (Win32): Loaded 'C:\Windows\SysWOW64\mswsock.dll'. Symbols loaded.
Debug Assertion Failed!
Program: ...win8.1-universal\Debug\RAIG3D.Windows\AppX\RAIG3D.Windows.exe
File: f:\dd\vctools\crt\crtw32\misc\dbgheap.c
Line: 1424
Expression: _pFirstBlock == pHead
我在链接到项目的 .dll
中使用 winsock2.h
。它是我正在尝试编写的自定义网络库。它在 windows
分支
https://github.com/damorton/libsocket/tree/windows
这个库适用于 win32 调试程序,但对于 win8.1 会出现上述错误
这不是构建错误,而是 运行 时错误。具体来说,断言已触发。这就是消息告诉您的内容:
Debug Assertion Failed!
刚刚执行了一段代码,它使用 assert
宏的某些变体来捕获可能的错误。它抓住了一个。这很好。更好的是,它会告诉您 where 触发了断言宏:
Program: ...win8.1-universal\Debug\RAIG3D.Windows\AppX\RAIG3D.Windows.exe
File: f:\dd\vctools\crt\crtw32\misc\dbgheap.c
Line: 1424
那是你的程序,但不是你的代码文件。所以这不是您编写的断言,它是 Microsoft 开发人员放入其 C 运行-time 库例程中的断言。具体来说,在 dbgheap.c
文件中,这表明它与调试堆有关,调试堆用于在调试构建中分配内存。
该消息还告诉您结果意外为假并因此触发断言的表达式是什么:
Expression: _pFirstBlock == pHead
看起来应该相等的两个指针实际上不相等。
如果您按下弹出消息框上的 "Retry" 按钮,您将能够使用调试器进入代码并在上下文中查看有问题的代码行。您还可以查看完整的调用堆栈。
调用堆栈有助于在您调入触发此断言的库代码之前查看您的 代码的哪一行正在执行。此断言是 CRT 作者放入其内存分配例程中的内部一致性检查。如果您触发了它,则说明您的应用程序内部出现了严重错误。
如果我在没有比我更多的可用信息的情况下冒险猜测,我猜您可能试图混合引用不同版本 CRT 的可执行文件和库。这是不受支持的,可能会导致严重的问题。不同版本的 CRT 有不同的对象大小、内存布局、静态变量等。这次你很幸运,它被断言捕获了。检查您的 所有 项目是否针对相同版本的 CRT,包括生成 DLL 和 LIB 的项目。从头开始进行全面重建,以确保它们都已更新。