锈-结合原结合提高SIGSEGV

时间:2019-01-23 03:36:29

标签: c++ rust bindgen

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

我的配置:

// 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");

使用cc-rs使用以下配置来编译SEAL项目:

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:无效参考),我用{{ 1}}来自复制指向内存池的指针。

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

您可以访问我的项目seal-rs here。整个过程都在构建脚本中,并克隆了存储库,因此gdb应该构建并重现错误。

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

1 个答案:

答案 0 :(得分:-1)

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