c++ - rust-bindgen 绑定(bind)引发 SIGSEGV

标签 c++ rust bindgen

我使用 Microsoft SEAL C++ Library 工具生成了到 rust-bindgen 的绑定(bind)。

我的配置:

// Generate the bindings
let bindings = bindgen::Builder::default()
    .generate_inline_functions(true)
    .derive_default(true)
    .header("./seal/src/seal/seal.h")
    .clang_arg("-I./seal/src/")
    .clang_arg("-std=c++17")
    .clang_arg("-x")
    .clang_arg("c++")
    .opaque_type("std::.*")
    .whitelist_type("seal::.*")
    .whitelist_function("seal::.*")
    .generate()
    .expect("Unable to generate bindings");

SEAL 项目使用 cc-rs 使用此配置编译:

let mut build = cc::Build::new();                
    build.cpp(true);                                 
    build.flag_if_supported("-std=c++17");           
    build.flag_if_supported("-march=native");        
    build.flag_if_supported("-fkeep-inline-functions");                                                   
    build.flag_if_supported("-fno-inline-functions");
    let base_path = Path::new("./seal/src/seal/");   
    let util_base_path = Path::new("./seal/src/seal/util/");                                              
    add_cpp_files(&mut build, base_path);            
    add_cpp_files(&mut build, util_base_path);       
    build.include("./seal/src");                     
    build.compile("seal"); 

但之后,当使用 static 方法创建新上下文(这主要是 SEAL 特定的)时,我得到一个段错误(SIGSEGV:无效引用),我在使用 gdb 调试后发现从复制指向内存池的指针开始。

我能够实例化多个常规对象(没有静态构造函数的东西),但无论我尝试什么参数,它似乎都不适用于 SEALContext。

您可以访问我的项目 seal-rs here 。整个事情都在构建脚本中并克隆了 repo,因此 cargo test 应该构建并重现错误。

我的操作系统是 Archlinux 64bit,使用的编译器是 clang 7。

最佳答案

这是由 rust-bindgen 库中的错误引起的,因此我将关闭这个问题。

关于c++ - rust-bindgen 绑定(bind)引发 SIGSEGV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54319681/

相关文章:

c++ - 将 std::web_view 工具引入标准有什么好处?

oop - 为二叉树实现 IntoIterator

rust - 尝试通过 cargo 修复更新版本时找不到本地 crate

c++ - 静态初始化器的上下文是什么,我如何声明它的友元?

c++ - OOP 游戏设计理论

c++ - 读取或写入 boost::asio::ssl::stream::next_layer() 是否绕过 SSL 解密/加密?

arrays - 如何创建需要固定大小数组的特征边界?

rust - 在 Rust 中取消引用 Rc<Vec<T>> 混淆

c - Rust 调用 C,C 代码中的静态常量