[SDL2] IMG_Load로 png 파일 로드시 문자열에 잘못된 문자가 있습니다

회사 프로젝트를 SDL2를 사용해 포팅작업을 4월 10일부터 시작했으니 한달이 조금 지났습니다. 순조롭게 진행중이었는데 다른 일정으로 잠시 보류 되었다가 다시 진행하려고 보니 SDL2_image lib에서 png 파일을 읽어오지 못하는 이슈가 발생했습니다.

SDL_Surface* surface = IMG_Load(strImage.c_str());
const char* error = IMG_GetError();
+ strImage "intro.png"
+ error 0x6c839080  <문자열에 잘못된 문자가 있습니다.> const char *

IMG_GetError()로 체크해보니 위와 같이 '문자열에 잘못된 문자가 있습니다' 라고는 하지만 근 한달동안 별 문제 없다가 수정도 되지 않은 코드에서 발생한 에러라 조금 당황스럽더군요.

저만 진행중인 일정이라 혹시나 해서 빌드한 바이너리를 팀원에게 전달 후 테스트해보니 잘 됩니다. 저만 안되더라는... 그래서 최근에 윈도우10 크리에이터 업데이트를 설치했었는데 이것과 호환성에 문제가 있나 싶어 이전 버전으로 복구를 해봤지만 이슈는 해결되지 않았습니다. 브런치로 작업중인데 trunk에서 머지해온게 뭔가 잘 못되서 메모리를 건드나? 이런 쪽으로도 접근해 봤지만 아니었습니다.

그러던 중 비주얼 스튜디오 출력창에 아래와 같은 것을 발견했습니다.

libpng16-16.dll'을(를) 로드했습니다.
libpng16-16.dll'을(를) 언로드했습니다.

이상하게 libpng16-16.dll이 로드된 후 바로 언로드를 하더군요.

확인해보니 libpng16-16.dll이 내부적으로 zlib1.dll과 의존성이 있었습니다.

SDL2_image를 압축해제하면 나오는 파일들인데 여기서 libpng16-16.dll, SDL2_image.dll만 쭉 사용하면서 포팅을 잘 해왔던 부분인데 한달이 지난 시점에 갑짜기 dll이 없다고 이슈를 터트려주다니? 황당하네요. 다른 dll은 파일이 없으면 없다고 팝업이 뜨는데 이놈은 그렇지도 않았구요.

아무튼 zlib1.dll을 복사해주고 해결이 되었습니다. 비주얼 스튜디오에도 아래와 같이 출력창에 뜨네요.

libpng16-16.dll'을(를) 로드했습니다
zlib1.dll'을(를) 로드했습니다.

http://stackoverflow.com/questions/21472958/sdl-image-img-load-fails-on-png-with-failed-loading-libpng16-16-dll

댓글

  1. png 파일의 경로에 한글이 포함되면 null을 return 해주는데 이거는 해결 불가인가요?

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.

goorm IDE에서 node.js 프로젝트로 Hello World Simple Server 만들어 띄워보기

애드센스 수익을 웨스턴 유니온으로 수표대신 현금으로 지급 받아보자.