2010-08-16 5 views
1

bcc 5.5.1을 사용하여 소스에서 SDL을 성공적으로 빌드했지만 시작시 SDL 테스트 응용 프로그램을 사용하면 즉시 충돌이 발생합니다. 이 문제를 해결하는 방법에 대한 도움말 및/또는 안내를 찾고 있습니다.소스에서 생성 한 SDL 라이브러리가 충돌합니다!

정보를 입력하기 만하면 SDL-1.2.14가 사용되었습니다. 이 프로젝트는 다중 쓰레드가 활성화되고 C 런타임에 동적으로 링크 된 dll로 컴파일됩니다. 또한 디버깅 정보로 다시 작성했습니다. 디버거를 크래시 지점까지 돌릴 때 sdlmain의 redirect_stdout에서 오는 것 같습니다. sdlmain.lib을 제거하고 sdl_win32_main.c 소스 파일을 SDL 테스트 프로젝트에서 직접 사용하면 더 이상 충돌이 발생하지 않습니다. 대신 나중에 SDL_Init 루틴에서 충돌합니다.

나는 이미 사용 된 호출 규칙을 확인했으며 모두 일치하는 것으로 보인다. 모든 것이 cdecl을 사용하고있다. 또한 컴파일 된 sdl.dll 및 테스트 응용 프로그램이 정적으로 링크 된 대신 동일한 동적 c 런타임을 사용하고 있는지 확인하고 확인했습니다.

Borland 섹션의 SDL 위키에서는 -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.RtlEnterCriticalSection과 관련이있는 ntdll.dll 어딘가와 같이 기괴한 어딘가에 충돌이 발생합니다. 나는 그 시점에서 스택 추적을 검사 할 때 나는 보통 이런 식으로 뭔가를 얻을 :

: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 

나는 꽤 난처한 상황에 빠진있어이 시점에서 시도 할 whatelse 모르겠어요. 누구든지 제안이 있거나 더 많은 정보를 제공해야하는 경우 의견에 자유롭게 의견을 추가하십시오.

감사합니다.

+0

이 사본 gcc가 제대로 구축 하는가 :)해야 모든 테스트 데모 실행? – genpfault

+0

cygwin 또는 mingw와 같은 gcc 포트로 시도하지는 않았지만 vs2008을 사용하여 성공적으로 빌드했습니다. 차이점이 어디에 있는지 지금 살펴보고 있습니다. – greatwolf

답변

3

좋아, 마침내 며칠 전 문제가 무엇인지 알았습니다. 충돌의 이유는 주어진 플랫폼에 대해 잘못된 소스 파일이 컴파일 되었기 때문입니다.

내가 사용한 프로젝트 파일은 스레드 \ generic에서 SDL_sysmutex.c를 계속 컴파일했습니다. win32에서 사용할 올바른 SDL_sysmutex.c는 threads \ win32에 있어야합니다. 테스트 프로그램을 나란히 놓고 쓰레드 모듈이 다른 코드 라인을 가지고있을 때 이것을 발견했습니다! 이 작은 감독과 함께

는 충돌 문제를 제외한 모든 사라진 고정 그들은