Привязки ржавчины связывают повышение 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, поэтому я закрою вопрос.