小编ken*_*spr的帖子

从Rust FFI访问DPDK中的静态C函数

我是一个相当新手的程序员,我遇到了一个我认为我理解但不知道如何修复的问题.我正在尝试使用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)

c ffi rust dpdk

4
推荐指数
1
解决办法
366
查看次数

从 Rust 到 C 的原始指针变为空

我试图从 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)

c ffi rust

4
推荐指数
1
解决办法
1246
查看次数

标签 统计

c ×2

ffi ×2

rust ×2

dpdk ×1