이번에는 안드로이드로 포팅하고자하는 C코드의 분석을 해볼 생각입니다.
해당 프로그램은 make를 하면 두가지 프로그램이 나옵니다.
vlmcsd
vlmcs

이중 vlmcsd는 서버이고 vlmcs는 클라이언트입니다.
저희가 쓸건 vlmcsd이므로 이것만 분석을 해볼 생각입니다.
일단 두가지 중 하나만 쓸것이니 모든 소스파일이 필요하지는 않을겁니다. Makefile을 열어서 어떻게 설정되어있나 봅시다.

???
PLEASE USE THE GNI VERSION OF MAKE (gmake) INSTEAD OF make
라고 합니다.
즉 이게 아니고 GNUmakefile을 열어야합니다.

이쪽을 열어서 all: (아무 파라미터없이 make만 쳤을때 실행되는 위치)아래에 보니 -C src라고 되어있습니다. src로 디렉토리를 바꾸란겁니다. 즉, src폴더 안에 있는 GNUmakefile을 읽어서 확인해야합니다.

SRCS =로 시작되는 위치를 봅시다.
crypto.c부터 helpers.c까지 이건 기본적으로 필요한 소스파일들 일것 일겁니다.

그리고 그 아래에
VLMCSD_SRCS를 보면 $(SRCS)에 vlmsd.c kmsdata.c
두가지 파일이 추가로 되는걸 볼 수있습니다.

여기에 아래를 보면 MSRPC어쩌고 있는데 이건 Windows용이니 이걸 제외했을때 network.c rpc.c두가지를 또 추가하는 군요.

그리고 Android에선
ifaddr-android.c
이것도 추가해야합니다.
이제 필요한 파일이 뭔지 파악했습니다. 이것이 필요한 이유는 Android Studio에서 CMakeList.txt에 쓸 소스파일을 전부 적어줘야하기 때문입니다.
즉 필요한 파일은
| crypto.c crypto_internal.c kms.c endian.c output.c shared_globals.c rpc.c network.c helpers.c vlmcsd.c kmsdata.c ifaddrs-android.c |
이렇게 되겠습니다.
그럼 이 파일들에서 main함수를 찾아야겠네요.
그런데 c파일에 main이 안 나옵니다. 이럴땐 h파일을 뜯어봐야합니다. vlmcsd.h에 이런 문구가 있군요.

#define server_main main
즉, vlmcsd.c의 server_main(int argc, CARGV argv)함수가 main함수라는 의미였습니다.
이제 엔트리포인트(프로그램 시작부분)을 찾았으니 Android에서 server_main함수를 호출 하게 만들면 되겠군요.
일단 이 h파일을 이용하면 server_main함수를 main함수로 치환해 버리니
#if MULTI~~~부터 #else까지 주석처리하고 #endif까지 주석처리해서 없애야 하겠습니다.

왜냐하면 안드로이드에선 so 라이브러리 형태로 만들어서 자바에서 호출을 할 예정이거든요. 근데 main함수가 따로 있으면 문제가 생기겠지요.
이제 원본파일 구성은 확인했으니 다음글에서는 Android Studio에서 NDK로 Wrapping하는것을 해보겠습니다.
'안드로이드 삽질기' 카테고리의 다른 글
| 그냥 해보는 C/C++ 프로그램 안드로이드 포팅 -1 (0) | 2025.11.11 |
|---|---|
| 안드로이드에서 윈도우프로그램을! Winlator (0) | 2025.02.19 |
| AOSP와 픽셀기반 롬 (2) | 2024.11.12 |
| 유튜브 앱 과연 필요할까? (0) | 2022.05.29 |
| 안드로이드 스마트폰에서 리눅스를! Termux (0) | 2021.11.01 |
