我尝试将外部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);
}
“Project1”库看起来像这样:
#include <stdio.h>
extern "C" {
int lib_fun(int t) {
printf("from C++: %d\n", t);
return t;
}
}
预期产出:
from C++: 2
from Rust: 2
实际输出顺序相反:
from Rust: 2
from C++: 2
外部函数lib_func
是否在另一个线程中执行?为什么呢?
详细说明:
答案 0 :(得分:5)
外部C ++代码使用自己的缓冲区写入stdout,并且它会比Rust调用者更快地刷新到系统缓冲区。 printf("...\n")
没有像我预期的那样刷新stdout缓冲区。
相反,我需要手动刷新它,例如通过调用fflush(stdout);