안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요.
ndk 관련작업을 하고 있는 안드로이드 초보입니다.
ndk 에서 지원하는 opengl 을 사용해서 작업을 하는데
처음에는 c 만을 사용해서 컴파일하다
class를 사용 해야 할거 같아서
c++ 로 컴파일 하니 기존 c 파일들이 컴파일 안되네요
여기 안펍을 검색해보니
Name mangling [name decoration] 에 의해서 extern "C" 를 선언하라고 하는데
어떻게 하는건지..
그리고 c와 cpp 를 같이 컴파일 하려면 android.mk 파일에
LOCAL_MODULE 을 제각기 선언해주어야 하는건가요?
안드로이드도 아직 잘 모르는데 ndk로 작업 하려니 삽질의 연속이네요 ㅜㅜ
많은 고수님들의 답변 부탁드립니다.
2012.07.18 16:40:33
감사합니다.
env->function(); // C++
(*env) -> function(env) // C
덕분에 이부분은 찾아서 거의 수정했습니다.
어떤 분이 답글 다신게 없어 진거 같은데...
컴파일 할때 c파일을 헤더파일들을
#ifdef __cplusplus
extern "C" {
#endif
#include <GLGameRenderer.h>
#ifdef __cplusplus
}
#endif
이런씩으로 include 할때도 extern C 를 해주니 컴파일이 되기는 하네요
근데 선언한 변수들이 중복선언되었다는 에러들이 수도 없이 뜨네요 ㅡㅡ;;
이거 어디서 부터 잡아 나가야할지...
점점 기초가 중요하다는걸 느끼게 됩니다 ㅜㅜ




c , c++ jni 규격이 틀려서 그렇습니다.
env->function(); // C++
(*env) -> function(env) // C
이부분 확인해 보시는게 좋을거 같고요..
네이밍데코레이션 혹은 맹글링은 같은 펑션을 호출했을때 심볼네이밍이 틀려져서
못부르는 상황이 되는겁니다.
심볼네이밍 할때 C++의 경우는 펑션 오보로딩이 가능해져서 이걸 구분하기 위해 심볼을 만들때
인자값까지포함해서 각각 심볼을 구분합니다.
암튼 찾아보시면 금새 파악될꺼에요..