我是一个相当新手的程序员,我遇到了一个我认为我理解但不知道如何修复的问题.我正在尝试使用Rust FFI与英特尔的DPDK进行交互,这完全在C中.我的第一次尝试是重新创建helloworld示例应用程序.
我正在达到一个编译错误,我认为这是由于DPDK的函数是静态的而不能直接从库中获得.我的FFI界面在这里:
use libc::{c_uint, c_int, c_void, c_char};
pub type LcoreFunctionT =
extern "C" fn(arg1: *mut c_void) -> c_int;
extern {
pub fn rte_eal_init(argc: c_int,
argv: *mut *mut c_char) -> c_int;
pub fn rte_eal_remote_launch(f: *mut LcoreFunctionT,
arg: *mut c_void,
slave_id: c_uint) -> c_int;
pub fn rte_eal_mp_wait_lcore() -> ();
pub fn rte_lcore_id() -> c_uint;
pub fn rte_get_next_lcore(i: c_uint,
skip_master: c_int,
wrap: c_int) -> c_uint;
}
Run Code Online (Sandbox Code Playgroud)
我还有一个引用它的库并包装函数:
extern crate libc;
use libc::{c_uint, c_int, c_char, c_void};
use std::ffi::CString;
use std::ptr;
mod …
Run Code Online (Sandbox Code Playgroud) 我试图从 rust 中的 C 函数中检索原始指针,并在另一个库中的另一个 C 函数中使用相同的原始指针作为参数。当我传递原始指针时,我最终在 C 端得到了一个 NULL 指针。
我试图制作我的问题的简化版本,但是当我这样做时,它会像我期望的那样工作 -
C 代码 -
struct MyStruct {
int value;
};
struct MyStruct * get_struct() {
struct MyStruct * priv_struct = (struct MyStruct*) malloc( sizeof(struct MyStruct));
priv_struct->value = 0;
return priv_struct;
}
void put_struct(struct MyStruct *priv_struct) {
printf("Value - %d\n", priv_struct->value);
}
Run Code Online (Sandbox Code Playgroud)
锈代码 -
#[repr(C)]
struct MyStruct {
value: c_int,
}
extern {
fn get_struct() -> *mut MyStruct;
}
extern {
fn put_struct(priv_struct: *mut MyStruct) -> ();
}
fn …
Run Code Online (Sandbox Code Playgroud)