libmms 포팅

Posted 2008. 2. 27. 00:55
리눅스 쪽에서 mms/mmsh 스트리밍 소스를 사용하기 위한 libmms라는 프로젝트가 있습니다. 현재 0.4까지 올라와있습니다.

저는 오늘 GStreamer Plug-ins Bad에 있는 libmms 플러그인을 사용하기 위해 libmms를 윈도로 포팅하는 작업을 했습니다. 윈도 GStreamer에서 mms 소스를 간단히 테스트하려고 시작했는데, libmms가 제대로 포팅이 안 되어 있어서 조금 고쳐서 해본다는 게 결국 꽤 많은 코드를 수정하게 되었군요. 역시나 버리기 아까워서 패치로 묶어서 메인테이너한테 보냈는데 어찌될지는 모르겠습니다.

libmms의 외부 의존성은 소켓 라이브러리 밖에 없긴 한데, 윈도 포트를 고려를 안 해놔서 윈도의 경우 WinSock 함수를 쓰도록 패치를 했습니다. 윈도 프로그래밍 경험이 많지 않아서 역사적인 이유는 모르겠지만, WinSock이 유닉스 계열 소켓 함수와 거의 비슷하면서 조금씩 다른 부분들이 있어서 귀찮더군요.

처음에 WSAStartup을 안 부르고 테스트하다가 한참을 헤맸습니다. 더불어 snprintf나 strcasecmp, strncasemp도 윈도 쪽에 같은 이름으로 함수가 없어서 귀찮더군요. Glib이라도 쓰면 g_만 붙여서 g_snprintf, g_strcasecmp, g_strncasecmp로 사용하면 좋긴 한데, libmms 경우는 Glib 의존성을 제거한 흔적(glib.h)이 남아 있어서 그것도 안 되는 것 같고요.

새삼스러운 질문이지만 C에서 네트워크 관련 라이브러리를 리눅스 혹은 윈도로 포팅하는 가장 쉬운 방법은 무엇일까요?