簡體   English   中英

我從源代碼構建的SDL庫崩潰了!

[英]The SDL library I built from source crashes!

我已經使用bcc 5.5.1從源代碼成功構建了SDL,但是任何使用它的SDL測試應用程序都會在啟動時立即崩潰。 我正在尋找有關如何解決此問題的幫助和/或指導。

只是為了填寫一些信息,使用了SDL-1.2.14。 該項目被編譯為具有多線程功能的dll,並動態鏈接到C運行時。 我還用調試信息對其進行了重建。 當我逐步調試器直至崩潰時,它似乎來自sdlmain中的redirect_stdout。 如果我刪除sdlmain.lib並直接在SDL測試項目中使用源文件sdl_win32_main.c,則不會再崩潰。 相反,它只是稍后在SDL_Init例程中崩潰。

我已經檢查過使用的調用約定,它們似乎都匹配了-一切都在使用cdecl。 我還檢查並確保編譯的sdl.dll和測試應用程序使用的是相同的動態c運行時,而不是靜態鏈接。

Borland部分下的SDL Wiki提到使用-b來確保enum的大小與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

我不確定目前要嘗試什么,因為我很困惑。 如果有人有任何建議或需要我提供更多信息,請隨時將其添加到評論中。

謝謝

好吧,我終於在幾天前發現了問題所在。 崩潰的原因是因為為給定平台編譯了錯誤的源文件。

我使用的項目文件不斷從thread \\ generic編譯SDL_sysmutex.c。 在win32下使用的正確SDL_sysmutex.c應該來自threads \\ win32。 當我並排跟蹤測試程序時,我發現了這一點,並且線程模塊具有不同的代碼行!

有了一點點的疏忽,崩潰的問題幾乎消失了,所有測試演示都按預期運行:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM