출처 : http://mobilism.tistory.com/56
NDK를 사용하는 예제들을 보면 대부분 dynamic library 를 빌드하는 예제인데요. 간혹, static library 가 필요할 때가 있죠. 그래서 이번에는 static library 빌드하는 방법과 몇 가지 주의할 점을 알아보겠습니다.
static library 빌드하는 기본적인 방법은 $(NDK)/samples/two-libs 예제를 참고하시면 됩니다. two-libs의 메이크 파일은 아래와 같은 내용인데요.
LOCAL_PATH:= $(call my-dir)
# first lib, which will be built statically
#
include $(CLEAR_VARS)
LOCAL_MODULE := libtwolib-first # static library 이름
LOCAL_SRC_FILES := first.c # static library 에 빌드될 소스 파일
include $(BUILD_STATIC_LIBRARY) # static library 빌드
# second lib, which will depend on and include the first one
#
include $(CLEAR_VARS)
LOCAL_MODULE := libtwolib-second # dynamic library 이름
LOCAL_SRC_FILES := second.c # dynamic library 에 빌드될 소스 파일. 빌드할 소스가 없다면 생략될 수 있다.
LOCAL_STATIC_LIBRARIES := libtwolib-first # 같이 빌드할 static library 이름
include $(BUILD_SHARED_LIBRARY) # dynamic library 빌드
# first lib, which will be built statically
#
include $(CLEAR_VARS)
LOCAL_MODULE := libtwolib-first # static library 이름
LOCAL_SRC_FILES := first.c # static library 에 빌드될 소스 파일
include $(BUILD_STATIC_LIBRARY) # static library 빌드
# second lib, which will depend on and include the first one
#
include $(CLEAR_VARS)
LOCAL_MODULE := libtwolib-second # dynamic library 이름
LOCAL_SRC_FILES := second.c # dynamic library 에 빌드될 소스 파일. 빌드할 소스가 없다면 생략될 수 있다.
LOCAL_STATIC_LIBRARIES := libtwolib-first # 같이 빌드할 static library 이름
include $(BUILD_SHARED_LIBRARY) # dynamic library 빌드
위의 내용을 보시면 먼저 static library 를 빌드하고 두 번째로 dynamic library 를 빌드하는 부분으로 나눠져 있는데, 주의점은 아래와 같습니다.
- static library 만 빌드하더라도 반드시 dynamic library 를 빌드하는 부분이 나와야 합니다.
- 이 때는 dynamic library 부분의 LOCAL_SRC_FILES 항목이 없어도 됩니다.
- static library 부분의 코드에는 JNI 관련 코드가 들어가서는 안 됩니다.
- JNI 관련 코드를 사용하려면 Java 층에서 dynamic library 를 불러들여 사용해야 하기 때문에, static library 에 들어가게 되면 런타임시 링크 에러가 발생하게 됩니다.
- 때문에, 일반적인 공통 모듈은 static library 로 빌드하고 JNI 관련 부분은 dynamic library 로 빌드해야 합니다.
- 빌드 후 dynamic library 파일(.so)은 $(ProjectDir)/libs/armeabi 폴더에 복사되고, static library 파일(.a)은 $(ProjectDir)/obj/local/armeabi 폴더에 그대로 남아 있습니다.
'6. With IT > 6.2 NDK' 카테고리의 다른 글
정적라이브러리 동적라이브러리 (0) | 2012.06.16 |
---|---|
c에서 java호출(Native to Java) (2) | 2012.03.26 |
Native to Android (0) | 2012.02.18 |
android-ndk-r7오류 (0) | 2012.02.12 |
cygwin삭제 (0) | 2012.02.11 |