За последние несколько недель я изучал ржавчину, и я думаю, что достиг уровня комфорта с языком.Для одного из моих личных проектов у меня возникают проблемы с вызовом кода ржавчины (скомпилированного в dll) из Java.
Вот что у меня сейчас для кода ржавчины:
use std::f64;
use std::any::Any;
#[no_mangle]
pub extern fn _Java_getDifferenceInAngleDegrees(env: *const (), jclass: *const (),from: f64, to: f64) -> f64 {
let mut angle = to - from;
// Naive algorithm
while (angle >= 180.0) {
angle -= 360.0;
}
while (angle < -180.0) {
angle += 360.0;
}
angle
}
fn main() {
println!("a");
}
И вот как я пытаюсь загрузить его в Java
import java.io.File;
public class test{
public static native double getDifferenceInAngleDegrees(double from, double to);
public static void main(String[] args) {
File f = new File("rustMath.dll");
System.load(f.getAbsolutePath());
System.out.println(test.getDifferenceInAngleDegrees(120.0, 119.0));
}
}
Я получаю ошибку:
Exception in thread "main" java.lang.UnsatisfiedLinkError: test.getDifferenceInAngleDegrees(DD)D
at test.getDifferenceInAngleDegrees(Native Method)
at test.main(test.java:17)
Cargo.toml
[package]
name = "rustMath"
version = "0.1.0"
authors = ["22ethompson"]
edition = "2018"
[lib]
crate-type = ["cdylib"]
path = "src/main.rs"
[profile.release]
lto = true
[dependencies]
jni = "0.10.2"