서적에 관한 질문 및 오류 등을 문의 할 수 있으며, 저자로부터 직접 답변을 받을 수 있습니다.
안녕하십니까?
JNI 문법에 의문 사항이 생겨 문의 드립니다.
NDK 책 110페이지 plus 예제에 보면
자바에서 c routine 호출 시에 아래와 같이
JNIEXPORT jint JNICALL Java_xxx_xxx_plusForJNI(...)
{
......
}
이렇게 되어 있는 부분이 있고
책 116페이지 two-libs 예제에서는 자바에서 c routine 호출 시에 아래와 같이
jint Java_xx_xx_add(....)
{
....
}
되어 있습니다.
위의 코드와 같이 two-libs 예제에서 자바에서 c routine 호출 시에 JNIEXPORT와 JNICALL을 키워드로 사용하지 않고 있습니다.
문의 점은 JNIEXPORT와 JNICALL의 사용 유무에 차이점이 있는 것인지 알고 싶습니다.
어설픈 질문 끝까지 읽어 주셔서 감사합니다. ^^
답변 기다리겠습니다.
즐거운 하루 보내십시오.
추가로 jni.h 파일을 살펴 보았습니다.
지금 저의 ndk 개발 환경 중심으로 말씀드리면,
파일 path는 android-ndk-r8d/platforms/android-8/arch-arm/usr/include/jni.h 입니다.
이 헤더 파일(jni.h)을 열어 보면 아래와 같이 되어 있습니다.
(중략)
#define JNIIMPORT
#define JNIEXPORT __attribute__ ((visibility ("default")))
#define JNICALL
(중략)
위의 코드를 보면 JNIIMPORT 와 JNICALL은 아무 의미가 없는 것으로 사료되며
JNIEXPORT는 so 파일을 만들 때 데이터 심볼을 보여즐 것이냐 아니면 보여 주지 않을 것이냐 하는 것으로 이해 됩니다.
따라서 two-libs 예제에서도 제 판단으로는 JNIEXPORT를 삽입해야 할 것 같은데 이 키워드 없이도 컴파일이 되는 것 같습니다.
조금 이해가 않되는 부분입니다.. ^^
아시는 분 계시면 명쾌한 답변 기다리겠습니다.
즐거운 하루 보내십시오.