我已经使用bcc5.5.1从源代码成功地构建了SDL,但是任何使用它的SDL测试应用程序在启动时都会立即崩溃。我正在寻求一些帮助和/或指导如何解决这个问题。
只是为了补充一些信息,使用了SDL-1.2.14。该项目被编译为启用多线程的dll,并动态链接到C运行时。我还用调试信息重建了它。当我一步一步地调试到崩溃点时,它似乎来自sdlmain中的redirect\u stdout。如果我移除sdlmain.lib 在sdl测试项目中直接使用源文件sdl\u win32\u main.c,这样就不会崩溃了。相反,它只是在稍后的SDL\u Init例程中崩溃。
我已经检查了使用的调用约定,它们似乎都是匹配的——所有的东西都在使用cdecl。我也检查了一下sdl.dll 测试应用程序使用相同的动态c运行时,而不是静态链接。
Borland部分下的sdlwiki提到使用-b来确保enum的大小与int相同,但是除非显式关闭,否则默认情况下编译器会启用该选项。不过,我确实用编译器/链接器开关重建了SDL。
当它崩溃时,在尝试写入某个地址(c000005)时总是访问冲突。例如,在一次典型的SDL init尝试中,如下所示:
// initialize SDL video
if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
printf( "Unable to init SDL: %s\n", SDL_GetError() );
return 1;
}
在调用SDL\ u 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
我不知道在这一点上该怎么做,因为我很难堪。如果有人有任何建议或需要我提供更多的信息,请随时添加到评论。
谢谢