반응형
Inside Android 책을 보면서 JNI 예제를 따라 해보고 있다.
책에서는 Visual C++로 예제를 실행하고 있어서 리눅스에서 so 만드는 법이 빠져있다.
1. 책의 예제대로 간단한 java파일을 하나 만든다. HelloJNI.java
public class HelloJNI {
native void printHello();
native void printString(String str);
static { System.loadLibrary("hellojni"); }
public static void main(String args[]) {
HelloJNI myJNI = new HelloJNI();
myJNI.printHello();
myJNI.printString("Hello World");
}
}
2. javac로 HelloJNI.java를 컴파일한다.
# javac HelloJNI.java
3. javah로 헤더를 생성한다. (HelloJNI.h가 생성된다.)
# javah HelloJNI
4. hellojni.c 파일을 만든다. (2에서 생성된 header를 include하고 함수의 바디를 구현)
#include "HelloJNI.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloJNI_printHello(JNIEnv *env, jobject obj)
{
printf("Hello World\n");
}
JNIEXPORT void JNICALL Java_HelloJNI_printString(JNIEnv *env, jobject obj, jstring string)
{
const char *str = (*env)->GetStringUTFChars(env, string, 0);
printf("Hello World : %s\n", str);
}
5. hellojni.c를 컴파일한다. (생성되는 so 파일명이 libXXX.so가 되어야 한다. XXX는 java 파일에서 load한 이름)
gcc -fPIC -c hellojni.c
gcc -shared -o libhellojni.so hellojni.o
6. LD_LIBRARY_PATH를 건다.
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
7. 실행한다.
java HelloJNI
* 6번과 7번 대신 아래 명령어를 실행해도 된다.
java -Djava.library.path=. HelloJNI
여담) 누군가는 하루 10시간을 회사에서 일하고 휴식을 취하지만, 누군가는 10시간이 넘게 회사에서 일하고 집에서는 미래를 만든다.
동기가 쓴 책을 읽을때보다 후배가 쓴 책을 읽고 있을때 나의 게으름이 더 절실히 와닿는 것 같다.
반응형
'프로그래밍 언어 > <Java>' 카테고리의 다른 글
Sort a HashMap by Value (0) | 2011.08.07 |
---|---|
[자바] 날짜, 요일 출력. (0) | 2010.11.06 |
[자바]일련의 숫자 임의 정렬하기 (0) | 2010.07.31 |
[String]String.format (0) | 2010.06.16 |
[팁] File 읽어서 파싱하기 (0) | 2010.06.10 |