제목에 영어는 붙여놨지만, 영어로는 크게 쓰지 않을 생각

0. 들어가기

libpng는 png 확장자를 가진 이미지 파일을 다루기 위한 라이브러리(library)이다. 윈도우용 라이브러리는 동적라이브러리(.dll)로 제공된다. 굳이 컴파일 하지 않고, 라이브러리를 다운받을 수 있지만, 컴파일 해보려면..
이곳에서 소스코드를 다운받을 수 있고, 컴파일된 라이브러리도 여기서 구할 수 있다. 나는 윈7 64bit를 쓰니까(물론 GnuWin32를 쓰면 되긴 하겠지만) 라는 핑계로 그냥 컴파일 해보기로 함. 옛날부터 이런 삽질 많이 했으니..

1. 컴파일을 위한 준비과정

소스코드를 받아보면, projects라는 디렉토리가 있는데, 그 안에 visualc71이라는 디렉토리가 있다. 친절하게 VS2005용 솔루션을 만들어주었다.
libpng를 컴파일 하기 위해서는 zlib라는게 필요하다. 마치 리눅스에서 아파치나 X윈도우 깔려면 미친듯한 의존성(dependency)가 있듯이. 자세히는 모르겠지만, png 압축 알고리즘에 zlib가 쓰이는 모양이다. zlib는 여러 압축 알고리즘에 쓰인다. 어디서 낯이 익었다 했는데 아마 리눅스 쓸 때, 깔리는 패키지 중에도 있는 모양.
zlib는 여기에서 다운받을 수 있다. 라이센스 문제 때문인지 libpng 내의 솔루션에 zlib 프로젝트가 추가되어 있지만 실제로 파일은 없다. 따라서 zlib를 따로 다운 받아서 png의 하위 디렉토리가 아닌, png 압축을 푼 디렉토리와 동등한 위치에 풀어서 디렉토리 이름을 zlib로 두도록 한다. 이해가 안되면, libpng 내의 솔루션을 열어서 zlib 프로젝트 파일들의 위치를 확인해보길..
libpng 솔루션 사엥서 zlib 파일들이 잘 열린다면, 다음 단계로 넘어가도록 하자. 심지어 .asm 어셈블러까지 있다 헐

2. 컴파일시 발생되는 문제점

대충 이런 비슷한 에러가 발생한다.
    inffas32.asm(647) : error A2070: invalid instruction operands    inffas32.asm(649) : error A2070: invalid instruction operands    inffas32.asm(663) : error A2070: invalid instruction operands    inffas32.asm(720) : error A2070: invalid instruction operands
이걸 고치기 위해 위의 invalid instruction ... 에 해당되는 에러 메시지와 libpng를 곁들여 구글신에게 물어봤더니 아니나 다를까 ( 원본링크 ) 세상엔 참 대단한 사람들이 많다..
    - movd mm7,[esi]    + movd mm7,dword ptr[esi]
에러 메시지를 더블클릭 하면 해당 에러가 나는 줄로 이동하는데, 2번째 오퍼랜드 앞에 dword ptr 을 추가해주면 된다.
if you encounter an error while you're compiling "libpng" on visual studio 2008, double-click the error message and fix the 2nd operand like (+). shortly you just add "dword ptr" right in front of the 2nd operand

3. 결과

잘 컴파일 된다. lib 파일도 잘 생성되고.. libpng13d.dll libpng13d.lib 파일 잘 생성된다.
이제 이걸 어떻게 가져다 쓸까 하는 고민이 남는군.. 일단 오늘은 여기까지

+ Recent posts