小编Ant*_*ope的帖子

链接到具有extern"C"函数的C++库

所以我正在为一个C++库编写一个Rust FFI,它有一个带有C风格函数头的extern"C"块.我的低级FFI构建.

但是,当我在另一个项目中使用我的FFI时,它没有正确链接,我得到运算符new(),delete()等的未定义引用.

我的问题是:

  1. 我搞砸了,因为这是C++,你不能将Rust链接到C++吗?

  2. 使用FFI库的应用程序是否应该以某种方式处理链接问题,如果是这样,如何处理?

  3. 我的libsomething.a可以以某种方式构建,以包含这些C++组件,如果是这样,如何?我目前正在使用gcc包装箱.

  4. 把你自己的解决方案放在这

ffi rust

10
推荐指数
1
解决办法
3101
查看次数

如何在生锈中创建并传递以空值终止的C字符串数组(char**)?

我正在使用一个新的init系统#![no_std]extern crate rlibcasm进行系统调用,并且当前也试图不分配内存.因此,我所拥有的可能工具的范围是有限的.

我需要调用execve系统调用,它需要a char** argv和a char **envp.我可以将c风格的字符串作为零的字节数组合在一起,但是我怎么能无效地终止静态声明的这样的列表(最后一个指针是NULL)

arrays c-str rust

9
推荐指数
1
解决办法
1745
查看次数

借用Mutex借用参考和保护

我试图封装一些代码以避免重复它,涉及从Mutex中借用数据以及进一步的操作(我将这个问题留在了范围之外,但却是激励因素).

以下示例代码抱怨说guard活动时间不够长.但这正是为什么我要回归guard为此目的明确设计的结构.

这是借入检查员的限制吗?关于解决这个问题的任何建议?

use std::sync::{Mutex,MutexGuard};
use std::ops::DerefMut;

pub struct InnerData {
    count: i32  // sample only
}

pub struct Data {
    pub inner_data: Mutex<InnerData>
}

pub struct BorrowedInnerData<'a> {
    pub inner_data: &'a mut InnerData,
    guard: MutexGuard<'a,InnerData>,
}

impl Data {
    pub fn borrow_inner_data<'a>(&'a mut self) -> BorrowedInnerData<'a> {
        let guard = self.inner_data.lock().unwrap();
        BorrowedInnerData {
            inner_data: guard.deref_mut(),
            guard: guard,
        }
    }
}

fn main() {
    let mut data = Data {
        inner_data: Mutex::new( InnerData {
            count: 5 …
Run Code Online (Sandbox Code Playgroud)

lifetime rust

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

标签 统计

rust ×3

arrays ×1

c-str ×1

ffi ×1

lifetime ×1