我使用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");

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

但是之后,当使用静态方法创建一个新的上下文(主要是SEAL-specific)时,我会得到一个分段错误(SIGSEGV:invalid reference),在用gdb调试之后,我发现这个错误来自于复制指向内存池的指针时。
我能够实例化多个常规对象(那些没有静态构造函数的对象),但不管我尝试使用什么参数,它似乎都不适用于SEALContext。
您可以访问我的项目seal-rs here。整个过程都在构建脚本中,并克隆了repo,因此cargo test应该构建并复制错误。
我的操作系统是Archlinux 64位,使用的编译器是clang 7。

最佳答案

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

关于c++ - rust -结合原结合提高SIGSEGV,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54319681/

10-13 04:44