Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何通过FFI静态链接相互依赖的锈菌和碳源?_C_Rust_Static Linking_Ffi - Fatal编程技术网

C 如何通过FFI静态链接相互依赖的锈菌和碳源?

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(

什么是最小的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(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”的文件将被编译成可执行文件(可能首先通过对象)。