[Rust] FFI: 자바에 꼽기
자바의 JNI와 Rust의 FFI를 이용하면 자바에서 러스트 코드를 사용할 수 있다.
먼저 자바에서 프로토타입을 선언해서 헤더파일을 만들고 그래야 하는데...
이에 대해 잘 모른다면 자세한 사항을 아래 포스팅을 참조하길 바란다.
https://blog.naver.com/sssang97/221737572369
Rust를 dll로 빌드해본 경험이 없다면 이것도 보는게 좋다.
https://blog.naver.com/sssang97/221729300138
dll에서 구현될 함수들의 프로토타입은 이렇다.
그냥 정수 덧셈과 루트, 단순출력함수다.
저걸 javah로 돌리면 뭐 이렇게 헤더파일이 생성될 것이다.
그럼 이제 저기에 맞춰서 러스트로 코드를 구현하면 된다.
당연히 라이브러리 형식으로 프로젝트를 만들고,
크레이트타입은 cdylib,
자바와의 타입 연동을 위해 외부 크레이트 jni를 포함한다.
저기에 자바의 문자열이나 정수 타입 등등의 정의가 들어있다.
그리고 아까 자동생성됐던 헤더의 선언을 잘 베껴서 구현한다.
대응하는 타입들은 jni 안에 다 들어있다.
그리고 #[no_mangle]을 붙여서 제멋대로 이름을 바꾸지 못하게 하고,
공개할 함수는 pub로 외부공개를 해야한다.
extern "C" 대신 extern "system"을 쓰기도 하는데, 무슨 차인진 모르겠다.
내가 돌렸을 땐 다 잘 돌았다.
저대로 빌드하고

dll을 건져서
자바에 잘 옮긴다.

그리고 위의 프토로타입대로 사용하면
잘 돌 것이다.