我正在编写一些锈蚀代码,它使用的是一个似乎没有相应Java库的Rust库(Didcomm)。
根据我发现的示例,为了在Rust和Java之间传递字符串值,我可以在Java中使用String,在Rust中使用*const c_char。
这似乎很好,只是我现在遇到了一些奇怪的事情。
我在Java中有一个单元测试来测试我的代码,在最后一次调用Rust时,它会崩溃,如下所示:
--分叉的VM --没有正确地说再见就结束了。VM崩溃还是System.exit呼叫?
我已经将println!语句放入了Rust代码中,并且我可以在生成的转储文件(这些println语句所在的位置)中看到代码确实到达了末尾。
这是我的Rust库中最后几行代码:
// 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代码清理一个变量或类似的东西有关,但我不知道如何调试它。
发布于 2022-09-15 15:13:48
所以我的问题最终与指针无关。
我是在使用错误的密钥/证书,在加密和解密的迪德康-rs图书馆。
虽然,多次运行相同的代码会导致锈蚀代码在不同的位置恐慌,这真的让我很不爽。
对于其中的一些注释,我确实看了一下didcomm-jvm库,但是它需要实现一些重要的接口,对于jni机箱,首先需要更多的步骤从Java代码创建一个头文件,然后从我所能知道的情况下,将它导入到Rust中,而不是以另一种方式。
我能够解决我的问题,所以我没有太深入地研究这个问题。
如果有必要,可以关闭/删除此票证,因为问题和解决方案并不特别匹配
https://stackoverflow.com/questions/73730105
复制相似问题