3
RustとCのソースを静的にリンクする最小限のMakefile、またはcargo
/rustc
+ cc
の呼び出しは、互いに依存しますか? example in the Rust docsに似ている(alexcrichton/rust-ffi-examplesから適応)このような何か、:FFIを使用して相互に依存するRustとCのソースを静的にリンクするにはどうすればよいですか?
main.cの
struct contrived { double x; double y; }
double GLOBAL_CONSTANT = 100;
extern double consume_input(struct contrived input);
int main() {
double output = consume_input({.x = 1, .y = 2});
printf("Got %f.", output);
return 0;
}
lib.rs
#![crate_type = "staticlib"]
#[repr(C)]
#[derive(Clone, Copy)]
struct Contrived {
x: f64,
y: f64,
}
extern {
#[link(name = "main", kind = "static")]
static GLOBAL_CONSTANT: f64;
}
#[no_mangle]
pub extern fn consume_input(input: Contrived) -> f64 {
input.x - input.y + GLOBAL_CONSTANT
}
lib.rsのみ構造体に依存している場合、それは実際にC libに依存しないのですか?
あなたの質問はあまり明確ではありません。あなたは*何を試しましたか?実際の例で他の言語(Cを含む)からRustコードを呼び出すために専用の[サイト全体](http://jakegoulding.com/rust-ffi-omnibus/)があります。あなたの質問にCライブラリ*がないので、 "C lib"のようなものは混乱を招いています。おそらく "main"と呼ばれるファイルは実行ファイルにコンパイルされます(おそらく最初にオブジェクトを通して)。 – Shepmaster