2015-01-21 20 views
6

Tak więc piszę Rust FFI do biblioteki C++, która ma zewnętrzny blok "C" z nagłówkami funkcji w stylu C w nim. I mój niski poziom FFI.Łączenie z biblioteką C++ z zewnętrznymi funkcjami "C"

Jednak kiedy używam FFI w innym projekcie, nie odwołuje się prawidłowo, a ja się niezdefiniowany odniesienie do operatora new(), delete(), itp

Moje pytanie brzmi:

  1. Mam wkręcić, ponieważ jest to C++ i nie możesz jeszcze połączyć Rusta z C++?

  2. Czy aplikacja zużywająca bibliotekę FFI powinna w jakiś sposób poradzić sobie z problemem powiązania, a jeśli tak, to w jaki sposób?

  3. Czy moja biblioteka libsomething.a może być w jakiś sposób wbudowana w te komponenty C++, a jeśli tak, to w jaki sposób? Obecnie używam skrzyni gcc raczej ogólnie.

  4. umieścić swoje własne rozwiązanie tutaj

Odpowiedz

5

Trzeba dynamicznie odwołuje się do libstdc++ dostać symbole Twój kod C++ będą potrzebne. Można polecić rustc to zrobić w skrypcie kompilacji:

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

See full example on github

Aby uzyskać więcej informacji na temat skryptów budować, zobaczyć the Cargo guide.

+0

To działało dla mnie jako opcja 3 powyżej. Od tego czasu pracowałem bez skrzynki gcc, ale musiałem dodać '-L native = $ outdir -l static = $ libname' do flag rdzy w println!() –

Powiązane problemy