RUST FFI 调用问题
💡
原文中文,约2100字,阅读约需5分钟。
📝
内容提要
在调用第三方动态库xxx.so时,发现用C++和Rust实现的结果不一致。问题出在回调函数的参数指针读取数据时,Rust和C++获取结果不同。经过多次测试修改字段类型,最终结果仍与C++不一样。问题可能与内存对齐和编译方式有关。
🎯
关键要点
- 在调用第三方动态库 xxx.so 时,C++ 和 Rust 的实现结果不一致。
- 问题出在回调函数的参数指针读取数据时,Rust 和 C++ 获取的结果不同。
- C++ 的结构体和回调函数定义与 Rust 的不同,导致输出结果差异。
- Rust 中的 nDataType 字段类型修改为 i16 后,部分字段结果与 C++ 相同,但仍有差异。
- 怀疑问题可能与内存对齐和编译方式有关,尝试了不同的对齐方式未能解决问题。
- 通过 objdump 工具确认 xxx.so 是由 C++ 编译而来,可能与此有关。
🏷️
标签
➡️