목차
- 자바 JNI C 소스코드 작성 및 so 라이브러리 만들기 예제 이전 포스팅 참고 학습
- 자바 javac 활용하여 java 소스 코드 컴파일 및 실행파일 만들기 예제 이전 포스팅 참고 학습
- 자바 SecureRandom 랜덤 메소드 활용 사용자 비밀번호 생성 예제 이전 포스팅 참고 학습
- 자바 소스 코드에서 JNI so 라이브러리 가져오기 예제(System.loadLibrary)
- 자바 so 라이브러리의 C 함수 호출 예제
자바 JNI C 소스코드 작성 및 so 라이브러리 만들기 예제 이전 포스팅 참고 학습
이전 포스팅에서 JNI(Java Native Interface)를 활용하여 C 소스 코드를 작성하고, 이를 컴파일하여 .so 라이브러리를 생성하는 방법을 학습했습니다. JNI를 이용하면 자바와 C/C++ 간의 상호 운용성을 구현할 수 있습니다. 오늘 예제에서는 so 라이브러리를 실제 자바 소스 코드에서 로드하여 해당 라이브러리의 C 함수를 호출할 예정입니다. 따라서 JNI C 소스 코드를 컴파일하여 so 라이브러리 빌드 방법을 모르신다면 아래 링크를 참고하여 학습해주세요.
2023.09.18 - [Java] - [Java/C] 자바에서 C 사용을 위한 JNI 소스코드 컴파일 및 라이브러리 생성 예제(so 라이브러리)
자바 javac 활용하여 java 소스 코드 컴파일 및 실행파일 만들기 예제 이전 포스팅 참고 학습
이전 포스팅에서는 자바 개발 환경에서 소스 코드를 컴파일하고 실행 파일을 만드는 방법을 다루었습니다. javac 컴파일러를 사용하여 자바 소스 코드를 컴파일하고, java 명령어로 실행할 수 있습니다. 오늘 예제도 리눅스 환경에서 자바 소스 코드를 컴파일하여 예제를 실행할 예정입니다. 따라서 아직 javac 활용하여 자바 소스 코드 컴파일 방법을 잘 모르신다면 아래 링크를 참고하여주세요.
2023.08.10 - [Linux] - [Linux/Java] 리눅스 우분투에서 java 컴파일 및 실행 예제(javac)
자바 SecureRandom 랜덤 메소드 활용 사용자 비밀번호 생성 예제 이전 포스팅 참고 학습
마지막으로 이전 포스팅에서는 SecureRandom 클래스를 사용하여 안전한 난수를 생성하고, 이를 활용하여 사용자 비밀번호를 생성하는 방법을 알아보았습니다. 이를 통해 보안적으로 강화된 비밀번호를 만들 수 있습니다. 만약 패스워드를 어떻게 만들어야할지 정책 수립이 잘 안된다면 이처럼 SecureRandom 자바 메소드를 활용하여 랜덤 패스워드를 만들어보세요. 아래는 해당 포스팅 링크입니다.
2023.08.17 - [Java] - [Java/Linux] 자바 SecureRandom 특정 범위 정수 랜덤값 생성 예제
자바 소스 코드에서 JNI so 라이브러리 가져오기 예제(System.loadLibrary)
아래는 JNI를 사용하여 생성한 .so 라이브러리를 자바에서 가져와서 로드하는 예제입니다. system.load 메소드를 사용하면 so 라이브러리를 자바 소스 코드에서 로드할 수 있습니다.
public class example {
static {
System.loadLibrary("myjniexample"); // library name
}
public static void main(String[] args) {
System.out.println("C library load ok");
}
}
자바 so 라이브러리의 C 함수 호출 예제
아래는 자바에서 JNI를 통해 가져온 .so 라이브러리 내의 C 함수를 호출하는 예제입니다. 이를 통해 C 함수를 호출하여 결과를 가져올 수 있습니다. 그리고 반드시 패키지 경로를 동일하게 맞춰야함으로, 디렉토리를 생성하고 class 파일을 복사합니다.
$ mkdir -p com/example
$ vim MyJavaClass.java
package com.example;
public class MyJavaClass {
static {
System.loadLibrary("myjniexample"); // library name
}
private native String getMessage();
public static void main(String[] args) {
MyJavaClass test = new MyJavaClass();
System.out.println(test.getMessage());
}
}
$ javac MyJavaClass.java
$ cp ./MyJavaClass.class com/example/
$ java com.example.MyJavaClass