C 如何通过FFI静态链接相互依赖的锈菌和碳源?
什么是最小的Makefile或C 如何通过FFI静态链接相互依赖的锈菌和碳源?,c,rust,static-linking,ffi,C,Rust,Static Linking,Ffi,什么是最小的Makefile或cargo/rustc+cc调用,以静态链接相互依赖的Rust和C源?类似这样的内容(改编自),类似于: main.c struct人造{double x;double y;} 双全局_常数=100; 外部双消耗输入(结构人为输入); int main(){ 双输出=消耗输入({.x=1,.y=2}); printf(“获得%f.”,输出); 返回0; } 图书馆 #![crate_type = "staticlib"] #[repr(C)] #[derive(
cargo
/rustc
+cc
调用,以静态链接相互依赖的Rust和C源?类似这样的内容(改编自),类似于:
main.c
struct人造{double x;double y;}
双全局_常数=100;
外部双消耗输入(结构人为输入);
int main(){
双输出=消耗输入({.x=1,.y=2});
printf(“获得%f.”,输出);
返回0;
}
图书馆
#![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库吗?这与
这是我不理解编译和链接阶段之间的区别;Rust文件对
GLOBAL\u常量的依赖关系在链接时才得到解决,因此创建librust.a
然后将其与可执行文件链接是没有问题的。您的问题不是很清楚。你已经试过什么了?有专门用于从其他语言(包括C)调用Rust代码的示例。说“C库”之类的话会增加混乱,因为在你的问题中没有C库;可能名为“main”的文件将被编译成可执行文件(可能首先通过对象)。