Загрузка кода Rust в Java, java.lang.UnsatisfiedLinkError: - PullRequest
3 голосов
/ 25 апреля 2019

За последние несколько недель я изучал ржавчину, и я думаю, что достиг уровня комфорта с языком.Для одного из моих личных проектов у меня возникают проблемы с вызовом кода ржавчины (скомпилированного в 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"
...