gpt4 book ai didi

c++ - 我从源代码构建的 SDL 库崩溃了!

转载 作者:太空宇宙 更新时间:2023-11-04 02:19:11 29 4
gpt4 key购买 nike

我已使用 bcc 5.5.1 从源代码成功构建 SDL,但使用它的任何 SDL 测试应用程序在启动时立即崩溃。我正在寻求有关如何解决此问题的帮助和/或指导。

只是为了填写一些信息,使用了 SDL-1.2.14。该项目编译为启用多线程并动态链接到 C 运行时的 dll。我还用调试信息重建了它。当我逐步使用调试器直到崩溃点时,它似乎来自 sdlmain 中的 redirect_stdout。如果我删除 sdlmain.lib 并直接在 SDL 测试项目中使用源文件 sdl_win32_main.c 那么它就不会再崩溃了。相反,它只是稍后在 SDL_Init 例程中崩溃。

我已经检查了使用的调用约定,它们似乎都匹配——一切都在使用 cdecl。我还检查并确保编译的 sdl.dll 和测试应用程序使用相同的动态 c 运行时而不是静态链接。

Borland 部分下的 SDL wiki 提到使用 -b 来确保枚举的大小与 int 相同,但编译器默认启用该选项,除非明确关闭。不过,为了确保万无一失,我确实使用该编译器/链接器开关重建了 SDL。

当它崩溃时,它总是试图写入某个地址 (c000005) 的访问冲突。例如,在典型的 SDL 初始化尝试期间:

// initialize SDL video
if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
printf( "Unable to init SDL: %s\n", SDL_GetError() );
return 1;
}

调用 SDL_Init() 后,控制不会流回测试应用程序。相反,它在某个奇怪的地方崩溃,比如 ntdll.dll 中的某个地方,与 NTDLL.RtlEnterCriticalSection 有关。当我检查堆栈跟踪时,我通常会得到这样的信息:

:77982269
:0044A04C
:0043F02B
:0043F7C4
:0043EF25
SDL_CreateSemaphore(1)
SDL_CreateMutex()
SDL_CreateSemaphore(1)
SDL_CreateMutex()
SDL_CreateSemaphore(1)
SDL_CreateMutex()
SDL_CreateSemaphore(1)
SDL_CreateMutex()
SDL_CreateSemaphore(1)
SDL_CreateMutex()
SDL_CreateSemaphore(1)
SDL_CreateMutex()
SDL_CreateSemaphore(1)
//and it keeps recursing... looks like a stackover? :P

我不确定在这一点上还能尝试什么,因为我很困惑。如果有人有任何建议或需要我提供更多信息,请随时将其添加到评论中。

谢谢

最佳答案

好吧,几天前我终于发现了问题所在。崩溃的原因是因为为给定平台编译了错误的源文件。

我使用的项目文件一直从 threads\generic 编译 SDL_sysmutex.c。在 win32 下使用的正确 SDL_sysmutex.c 应该来自 threads\win32。当我并排跟踪测试程序并且线程模块具有不同的代码行时,我发现了这一点!

通过修复这个小疏忽,崩溃问题几乎消失了,所有测试演示都在正常运行:)

关于c++ - 我从源代码构建的 SDL 库崩溃了!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3490157/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com