a.h, b.h, c.h
a.cpp
b.cpp
c.cpp
LOCAL_SRC_FILES := \
a.cpp \
b.cpp \
c.cpp \
# 각각 정적 라이브러리로 만들어줘야, 공유 라이브러리생성시, 가져다 쓸 수 있다.
include $(BUILD_STATIC_LIBRARY)
=> 이것들을 컴파일 하면 AlphabetLib.a (static library) 가 생긴다
============================================================================
============================================================================
one.h, two.h, three.h
one.cpp
two.cpp
three.cpp
LOCAL_SRC_FILES := \
one.cpp \
two.cpp \
three.cpp\
# 각각 정적 라이브러리로 만들어줘야, 공유 라이브러리생성시, 가져다 쓸 수 있다.
include $(BUILD_STATIC_LIBRARY)
=> 이것들을 컴파일 하면 NumberLib.a (static library) 가 생긴다
============================================================================
============================================================================
# 공유라이브러리 사용시 선언
include $(BUILD_SHARED_LIBRARY)
@@@.mk 파일에서 설정시, 각 cpp파일들을 한번씩만 컴파일 해 두면, 여러곳에서 사용할 수 있는 라이브러리가 생성된다.
LOCAL_SRC_FILES := \
one.cpp \
two.cpp \
three.cpp\
==> 그러므로, one.cpp 에서 a.cpp에 있는 함수를 사용하기 위해서 #include "a.cpp" 와 같은 행동은 함수의 multiple definition이 나올 수가 있게된다. 즉 #include "a.cpp"와 같은 행동은, a.cpp안에 있는 소스코드 내용을 그대로 one.cpp에 복사한 효과가 나타나기 때문에 링크 과정에서 당연히 multiple definition 에러가 나게된다.!!
결론 => 무조건 다른 곳에 있는 함수를 가져다 쓸 데에는 반드시 헤더파일만을 include하도록!!! (즉, 함수의 선언부분(definition만)만 정의해주어도, 컴파일러가 잘 알아먹는다.)
그리고 .h파일에는 웬만하면 함수의 프로토타입(Prototype)만을 정의해두고, 변수선언같은 것은 하지 말도록 하자!!
'6. With IT > 6.2 NDK' 카테고리의 다른 글
안드로이드 File Explorere에서 sdcard안에 디렉토리가 만들어지지 않을때... (0) | 2012.09.08 |
---|---|
android-ndk-profile (0) | 2012.08.24 |
(.data+0x0) multiple definition of 변수 에러 (0) | 2012.06.18 |
정적라이브러리 동적라이브러리 (0) | 2012.06.16 |
c에서 java호출(Native to Java) (2) | 2012.03.26 |