Связывание с библиотекой c++, имеющей функции extern" C

поэтому я пишу Rust FFI в библиотеку C++, в которой есть блок extern "C" с заголовками функций C-style. И мой низкоуровневый FFI строит.

однако, когда я использую свой FFI в другом проекте, он не связывается должным образом, и я получаю неопределенную ссылку на оператор new (), delete () и т. д.

мой вопрос:

  1. я облажался, потому что это C++ , и Вы еще не можете связать Rust с C++?

  2. Если приложение, потребляющее библиотеку FFI, как-то справляется с проблемой связывания, и если да, то как?

  3. мой libsomething.a как-то встроить эти компоненты C++, и если да, то как? В настоящее время я использую ящик gcc довольно обобщенно.

  4. поместить свое собственное решение

1 ответов


вам нужно динамически ссылаться на libstdc++ получить символы кода C++ понадобится. Вы можете проинструктировать rustc чтобы сделать это в вашем скрипте сборки:

extern crate gcc;
use std::default::Default;

fn main() {
    gcc::compile_library("libhello.a", &Default::default(), &["cpp/hello.cpp"]);
    println!("cargo:rustc-flags=-l dylib=stdc++");
}

см. полный пример на github

для получения дополнительной информации о сценариях сборки см. грузовой руководство.