2015-01-21 27 views
6

Bu yüzden içinde bir C-stili işlev üstbilgileri bulunan bir "C" bloğuna sahip bir C++ kitaplığına bir Rust FFI yazıyorum. Ve düşük seviyeli FFI'm oluşturur."C" işlevleri olan bir C++ kütüphanesine bağlanma

başka projede benim FFI kullandığınızda, ancak,

Benim sorum, vb) (silme) o şekilde bağlantı vermiyor ve ben (yeni operatöre tanımsız başvuru almak:

  1. Bu C++ olduğundan ve Rust'u C++ ile henüz ilişkilendiremiyorsunuz diye vidalandım mı?

  2. FFI kitaplığını kullanan uygulama bir şekilde bağlama sorunuyla uğraşırsa, ve eğer öyleyse, nasıl?

  3. Libsomething.a, bu C++ bileşenlerini içerecek şekilde bir şekilde oluşturulabilir mi ve eğer öyleyse, nasıl? Şu anda gcc sandığını genel olarak kullanıyorum.

cevap

5

dinamik sembolleri C++ kod gerekecektir almak için libstdc++ bağlamanız gereken Buraya kendi çözümünü koydu. Eğer yapı komut bunu rustc talimat verebilirsiniz: yapı komut hakkında daha fazla bilgi için the Cargo guide bkz

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

.

+0

Bu, yukarıdaki 3. seçenek olarak benim için çalıştı. O zamandan beri gcc sandığını kullanarak çalıştım ama printl'deki pasc-flag'lara '-L native = $ outdir -l static = $ libname 'eklemesi gerekiyor!() –

İlgili konular