我试图将一个外部 C++ 函数与我的 Rust 应用程序链接起来。此函数有效,但它的执行顺序与从 Rust 代码调用时的顺序不同。
为什么会这样?这有记录吗?
这是 Rust 应用程序的 list :
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);
}
“项目 1”库如下所示:
#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
是否在另一个线程中执行?为什么?
详细信息:
- 平台:Windows 7,x64,
- Rust:1.26.0(每晚),
- C++:Microsoft Visual Studio Community 2017 预览版 15.7.0 预览版 2.0
- 终端:IntelliJ IDEA 的集成终端。
最佳答案
外部 C++ 代码使用它自己的缓冲区写入标准输出,并且它比 Rust 调用者晚刷新到系统缓冲区。 printf("...\n")
没有像我预期的那样刷新标准输出缓冲区。
相反,我需要手动刷新它,例如通过调用 fflush(stdout);
关于c++ - 为什么 Rust 函数和 FFI C++ 函数以相反的顺序执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49475166/