首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ffi将数据从Rust传递到Java的奇怪错误

使用ffi将数据从Rust传递到Java的奇怪错误
EN

Stack Overflow用户
提问于 2022-09-15 11:13:39
回答 1查看 57关注 0票数 0

我正在编写一些锈蚀代码,它使用的是一个似乎没有相应Java库的Rust库(Didcomm)。

根据我发现的示例,为了在Rust和Java之间传递字符串值,我可以在Java中使用String,在Rust中使用*const c_char

这似乎很好,只是我现在遇到了一些奇怪的事情。

我在Java中有一个单元测试来测试我的代码,在最后一次调用Rust时,它会崩溃,如下所示:

--分叉的VM --没有正确地说再见就结束了。VM崩溃还是System.exit呼叫?

我已经将println!语句放入了Rust代码中,并且我可以在生成的转储文件(这些println语句所在的位置)中看到代码确实到达了末尾。

这是我的Rust库中最后几行代码:

代码语言:javascript
复制
    // other code
    let result = to_ptr(base64::encode(&message));
    println!("6");
    result
}

fn to_ptr(string: String) -> *const c_char {
    let cs = CString::new(string.as_bytes()).unwrap();
    let ptr = cs.as_ptr();
    // Tell Rust not to clean up the string while we still have a pointer to it.
    // Otherwise, we'll get a segfault.
    mem::forget(cs);
    ptr
}

我怀疑这可能与Rust代码或Java代码清理一个变量或类似的东西有关,但我不知道如何调试它。

EN

回答 1

Stack Overflow用户

发布于 2022-09-15 15:13:48

所以我的问题最终与指针无关。

我是在使用错误的密钥/证书,在加密和解密的迪德康-rs图书馆。

虽然,多次运行相同的代码会导致锈蚀代码在不同的位置恐慌,这真的让我很不爽。

对于其中的一些注释,我确实看了一下didcomm-jvm库,但是它需要实现一些重要的接口,对于jni机箱,首先需要更多的步骤从Java代码创建一个头文件,然后从我所能知道的情况下,将它导入到Rust中,而不是以另一种方式。

我能够解决我的问题,所以我没有太深入地研究这个问题。

如果有必要,可以关闭/删除此票证,因为问题和解决方案并不特别匹配

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73730105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档