Привязки ржавчины связывают повышение SIGSEGV

Я создал привязки к библиотеке Microsoft SEAL C++ с помощью инструмента 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) с использованием статического метода, я получаю ошибку сегментации (SIGSEGV: недопустимая ссылка), которую я понял после отладки с помощью gdb происходит, когда копируется указатель на пул памяти.

Я был в состоянии создать несколько обычных объектов (вещи, которые не имели статического конструктора), но, похоже, он не работает для SEALContext независимо от того, какие параметры я пробую.

Вы можете получить доступ к моей печати проекта здесь. Все это в сценарии сборки и клонирует репозиторий так cargo test должен построить и воспроизвести ошибку.

Моя ОС - Archlinux 64bit, используемый компилятор - Clang 7.

1 ответ

Это вызвано ошибкой в ​​библиотеке rust-bindgen, поэтому я закрою вопрос.

Другие вопросы по тегам