마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

JNI 에서 cpp 파일에서 c 파일 함수 호출시 오류 발생

0 추천

안녕하세요. 

JNI 쪽 개발을 하고 있는데...

우선 .cpp 파일에서 .c 파일안의 함수를 호출하니 

undefined reference to `return_five' // .c 파일안에 있는 return_five() 함수

라는 오류가 발생합니다.

.c 파일을 .cpp 로 해주면 해결이 되지만...

꼭 .c 로 해야 할 일이 있어서요...

#ifdef __cplusplus
extern "C" {
#endif
int return_five();
#ifdef __cplusplus
}
#endif

를 해줘도 그러네요...  잘못 사용하고 있는 건지...

 

test.c 파일

#include <iostream>
#include "testcall.h"

int return_five()
{
   return 5;
}

 

test.h

#ifdef __cplusplus
extern "C" {
#endif

int return_five();

#ifdef __cplusplus
}
#endif

 

.native 코드가 구현되어 있는 .cpp 에서 

int five = return_five();

호출시 

Error:(73) undefined reference to `return_five'

 

뭔가 다른걸 해줘야 하는 건가요???

같은 환경에서 파일명만 .c -> .cpp 로 변경시 해당 오류 해결이 됩니다.

뭔가요.. 대체... ㅠㅠ

 

 

까리산적 님이 2016년 8월 25일 질문

2개의 답변

0 추천
iostream 은 c++ 헤더라 컴파일에서 오류가 났는데. 모르고 넘어갔다가 링크단계에서 오류가 난게 아닐까 합니다.

헤당 헤더를 제거 하고  클린 빌드 해 보세요.
익명사용자 님이 2016년 8월 26일 답변
0 추천
자답.

.mk 파일에 .c INCLUDE 를 해주지 않아 발생한 문제 였습니다.

너무 기본적인 것이라 문의글 올린 제가 부끄럽네요...  ㅋㅋ
익명사용자 님이 2016년 9월 4일 답변
...