生锈的BindGen绑定提高SIGSEGV

问题描述 投票:0回答:1

我生成绑定使用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"); 

但事后,创建一个新的上下文时(这主要是密封专用)采用静态方法,我得到一个分段错误(SIGSEGV:无效的引用)我gdb调试后想通其中,来自当指针指向一个内存池被复制。

我能够实例化多个规则物体(的东西,没有一个静态构造函数),但它似乎并没有对SEALContext工作,不管我什么参数。

您可以访问我的项目seal-rs here。整个事情是在构建脚本和克隆回购所以cargo test应建立和重现错误。

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

c++ rust bindgen
1个回答
-1
投票

这是由铁锈BindGen对库中的缺陷因为这样我会关闭的问题引起的。

© www.soinside.com 2019 - 2024. All rights reserved.