rust jni环境测试设置在mac上

r55awzrz  于 11个月前  发布在  Mac
关注(0)|答案(1)|浏览(146)

我正在使用crate jni = { version = "0.20.0", features = ["invocation"] },并试图设置一个可以运行JNI东西的测试。
我的 Boot 代码如下

let jvm_args = InitArgsBuilder::new()
            .version(JNIVersion::V8)
            .option("-Xcheck:jni")
            .build()
            .unwrap();

        let jvm = JavaVM::new(jvm_args).unwrap();
        let _guard = jvm.attach_current_thread().unwrap();
        let env = jvm.get_env().unwrap();
        JavaClasses::init(&env);

字符串
我似乎不能让这个运行在mac上,因为当IDE RustRover启动二进制文件,它总是有问题,找到动态链接库,抱怨

Error: could not find libjava.dylib
Failed to GetJREPath()


试图查找rpath名称,似乎没有返回任何内容

➜  blaze git:(tests) ✗ otool -l xxxlaze/target/debug/deps/blaze_tests-b310798913eec8e4 | ag -C 5 LC_RPATH       
➜  blaze git:(tests) ✗


我确实试图在build.rs中设置它们

println!("cargo:rustc-link-search=native={}", libjvm_path.display());
    // println!("cargo:rustc-link-arg=-Wl,-rpath={}", libjvm_path.display());
    println!("cargo:rustc-env=LD_LIBRARY_PATH={}", libjvm_path.display());

7uhlpewt

7uhlpewt1#

我发送了一些类似于JNI crate的东西,用一个build.rs构建脚本来定位JVM路径,就像这样(与JNI crate中的版本完全相同)

fn find_libjvm<S: AsRef<Path>>(path: S) -> Option<PathBuf> {
    let walker = walkdir::WalkDir::new(path).follow_links(true);

    for entry in walker {
        let entry = match entry {
            Ok(entry) => entry,
            Err(_e) => continue,
        };

        let file_name = entry.file_name().to_str().unwrap_or("");

        if file_name == EXPECTED_JVM_FILENAME {
            return entry.path().parent().map(Into::into);
        }
    }

    None
}

字符串
然后下面是键,设置rpath,用于定位dylib。

println!("cargo:rustc-link-arg=-Wl,-rpath,{}", libjvm_path.display());


这使得测试运行。

相关问题