我试图将外部C++函数与我的Rust应用程序链接.此函数有效,但它的执行顺序与从Rust代码调用的顺序不同.
为什么会这样?这记录了吗?
以下是Rust应用程序的列表:
extern crate libc;
use libc::c_int;
#[link(name = "Project1", kind = "static")]
extern "C" {
pub fn lib_fun(i: c_int) -> c_int;
}
fn main() {
unsafe {
lib_fun(2);
}
println!("from Rust: {}", 2);
}
Run Code Online (Sandbox Code Playgroud)
"Project1"库看起来像这样:
#include <stdio.h>
extern "C" {
int lib_fun(int t) {
printf("from C++: %d\n", t);
return t;
}
}
Run Code Online (Sandbox Code Playgroud)
预期产量:
from C++: 2
from Rust: 2
Run Code Online (Sandbox Code Playgroud)
实际输出顺序相反:
from Rust: 2
from C++: 2
Run Code Online (Sandbox Code Playgroud)
外部函数是lib_func
在另一个线程中执行的吗?为什么?
细节:
外部C++代码使用自己的缓冲区写入stdout,并且它会比Rust调用者更快地刷新到系统缓冲区.printf("...\n")
不像我预期的那样刷新stdout缓冲区.
相反,我需要手动刷新它,例如通过调用 fflush(stdout);