-
JNI 사용하여 Native Method를 가동시켜 HelloWorld를 찍기Java 2020. 4. 24. 19:16
소스 코드입니다.
github https://github.com/hodolee246/intellij-on-my-own/tree/master/jnisample
ubuntu 환경에서의 Java JNI 사용하여 HelloWorld찍기!
목차
1. HelloJni.java 작성
2. HelloJni.java 컴파일
3. HelloJni.h header파일 생성
4. HelloJni.c 파일 생성
5. hellojni.so 파일 생성
6. 환경변수 입력
7. 실행
HelloJni.java
public class HelloJni { native void printHello(); static { System.loadLibrary("hellojni"); } }
1. HelloJni.java 작성
먼저 HelloJni.java를 작성해 줍니다.
여기서 System.load 와 System.loadLibrary차이점을 말씀드리겠습니다.
System.load >> .so 파일의 경로를 전부다 입력해 주어야합니다. lib/path/libhellojni.so
System.loadLibrary >> 경로를 생략할 수 있으며 so파일명의 lib 및 뒤 .so 확장자를 생략할 수 있습니다.
2. HelloJni.java를 컴파일
터미널에서 아래 명령어를 이용해서 HelloJni.java 파일을 컴파일 해줍니다.
javac HelloJni.java
컴파일을 해주면 HelloJni.class 파일이 생기게 됩니다.
3. HelloJni.h 헤더파일 생성
다시한번 터미널창을 이용하여 헤더파일을 생성해줍니다. 입력 명령어 형식으로는
javah -cp {자신의 프로젝트 경로} {자신의 패키지이름.파일명}을 입력해줍니다.
명령어 형식 javah -cp /자신의 프로젝트 까지의 경로 패키지이름.파일이름 명령어 예제 javah -cp /home/jeon/IdeaProjects/github/intellij-on-my-own/jnisample/src sample.jni.HelloJNI
HelloJni.c
#include "HelloJni.h" #include <stdio.h> JNIEXPORT void JNICALL Java_HelloJni_printHello(JNIEnv *env, jobject obj) { printf("Hello World!!"); }
4. HelloJni.c 파일 생성
이제 Jni로 실행할 Native Method를 c파일로 만들어 줍니다.
5. libhellojni.so 파일 생성
터미널에서 아래의 명령어를 입력해줍니다. 첫번째 경로는 jni.h 뜻하는거고 두번째 경로는 jni_md.h를 말하는거다.
gcc -I$JAVA_HOME/include -I$JAVA_HOME/include/linux -shared -m64 -fPIC HelloJni.c -o libhellojni.so
6. 환경변수 입력
이제 마지막으로 환경변수를 입력하여 경로를 지정해주고 .so파일을 등록한 경로에 복사를 해준다.
관리자 권한으로 환경변수 설정창을 열어주고 sudo nano /etc/profile Ctrl + g를 눌러 맨아래로 이동 후 아래의 값을 입력해준다. export LD_LIBRARY_PATH=/usr/lib:/usr/local/lib 값을 입력 후 Ctrl+x -> Y -> enter 눌러 저장 후 빠져나온다. 마지막으로 등록한 경로로(/usr/lib) libhellojni.so 파일을 복사해준다.
7. 실행
'Java' 카테고리의 다른 글
메서드 메모리관리 (0) 2020.06.17 jMeter 사용하기 (with MQTT) (2) 2020.05.12 소켓 통신 I/O Stream (0) 2020.05.07 JNI란? (0) 2020.04.23 JVM 이란? (0) 2020.04.22