프로그래밍/Linux/Ubuntu
zlib를 static link 빌드하여 linux에서 사용하기
초록생선
2012. 10. 9. 15:43
zlib를 static하게 빌드하여 사용하는 방법을 공유합니다.
대략의 skeleton이니, 좀더 확인해 보시기 바랍니다.
와 같이 zlib를 사용하는 코드를 가정해 봅시다. 물론, 코드에 포함된 의미는 없습니다.
단지, gzopen이나 gzread와 같은 함수 사용에 대한 빌드가 이뤄지는지에 대한 확인이니깐요.
일단, 위 파일을 ~/zlib/test.cpp로 저장합니다.
우선, zlib의 source를 다운로드하고, ~/zlib/zlib-1.2.7에 압축을 풉니다. (작성일 기준으로 1.2.7 버전입니다.)
~/zlib/zlib-1.2.7/zlib.h이 존재하면 됩니다.
이제 다음과 같이 zlib를 컴파일 하고 test.cpp를 빌드합니다.
즉, zlib의 ./configure -s를 통해 makefile을 생성합니다. 그다음 make하여 .o와 같은 library를 생성합니다. 그리고 gcc를 통해 빌드된 .o를 link합니다. gcc에 들어같 .o는 다음과 같습니다.
불필요한 .o는 삭제해도 무방합니다. 그리고 example*.o와 minigzip*.o는 link하지 않도록 합니다.
위 나열된 .o들과 -I"..."는 사용하시는 Makefile에 추가하여 사용하시면 됩니다.
물론, 위 코드는 test.cpp 위치에 *.o를 복사하여 사용하는데, /zlib1.2.7.object 경로에 위 *.o를 복사하고, 상대경로로 *.o를 지정(예, ./zlib1.2.7.object/adler32.o)하면 좀더 유연할 듯 합니다.
대략의 skeleton이니, 좀더 확인해 보시기 바랍니다.
#include <stdio.h> #include "zlib.h" int main(void) { printf("hello, world!!!\r\n"); gzopen("/tmp/a.zlib", "w"); gzread(NULL, NULL, 0); } |
와 같이 zlib를 사용하는 코드를 가정해 봅시다. 물론, 코드에 포함된 의미는 없습니다.
단지, gzopen이나 gzread와 같은 함수 사용에 대한 빌드가 이뤄지는지에 대한 확인이니깐요.
일단, 위 파일을 ~/zlib/test.cpp로 저장합니다.
우선, zlib의 source를 다운로드하고, ~/zlib/zlib-1.2.7에 압축을 풉니다. (작성일 기준으로 1.2.7 버전입니다.)
~/zlib/zlib-1.2.7/zlib.h이 존재하면 됩니다.
이제 다음과 같이 zlib를 컴파일 하고 test.cpp를 빌드합니다.
~$ cd ~/zlib/zlib-1.2.7/ ~/zlib/zlib-1.2.7$ ./configure -s Checking for gcc... Checking for shared library support... Building shared library libz.so.1.2.7 with gcc. Checking for off64_t... Yes. Checking for fseeko... Yes. Checking for strerror... Yes. Checking for unistd.h... Yes. Checking for stdarg.h... Yes. Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf(). Checking for vsnprintf() in stdio.h... Yes. Checking for return value of vsnprintf()... Yes. Checking for attribute(visibility) support... Yes. Looking for a four-byte integer type... Found. ~/zlib/zlib-1.2.7$ make |
gcc ... adler32.o gzread.o inflate.o trees.o compress.o gzwrite.o inftrees.o uncompr.o crc32.o gzclose.o infback.o zutil.o deflate.o gzlib.o inffast.o
위 나열된 .o들과 -I"..."는 사용하시는 Makefile에 추가하여 사용하시면 됩니다.
물론, 위 코드는 test.cpp 위치에 *.o를 복사하여 사용하는데, /zlib1.2.7.object 경로에 위 *.o를 복사하고, 상대경로로 *.o를 지정(예, ./zlib1.2.7.object/adler32.o)하면 좀더 유연할 듯 합니다.