LINUX.ORG.RU

История изменений

Исправление NIR, (текущая версия) :

Из того, что я выяснил:
- Необходимо добавить:

#![crate_type = "cdylib"]
extern crate libc;
use libc::{нужные типы данных};

...в lib.rs библиотеки. Возможно libc необязательна, но можно будет сделать принимаемые функциями параметры вполне себе соответствующими сишным.
- В Cargo.toml прописываем:
[dependencies]
libc = "0.2"
- В main.rs прописываем:
#[link(name = "mylib")]
extern {
        fn mylib_function(<сишные параметры>);
}

fn main () {
        unsafe {
                mylib_function(<передаваемые параметры>);
        }
}

Руководствовался этим:
https://doc.rust-lang.org/book/ffi.html
Там, правда, рекомендуют для всех объявленных прототипов функций ещё написать обёртки, но это мне пока рано делать.

Вообще, оно у меня всё равно падает с ошибкой линковки, но это скорее потому, что я неправильно описал принимаемые типы libc. И ещё не может обнаружить путь к самой библиотеке. В процессе решения проблемы.

Исходная версия NIR, :

Из того, что я выяснил:
- Необходимо добавить:

#![crate_type = "cdylib"]
extern crate libc;
use libc::{нужные типы данных};

...в lib.rs библиотеки. Возможно libc необязательна, но можно будет сделать принимаемые функциями параметры вполне себе соответствующими сишным.
- В Cargo.toml прописываем:
[dependencies]
libc = "0.2"

- В main.rs прописываем:
#[link(name = "mylib")]
extern {
        fn mylib_function(<сишные параметры>);
}

fn main () {
        unsafe {
                mylib_function(<передаваемые параметры>);
        }
}


Руководствовался этим:
https://doc.rust-lang.org/book/ffi.html
Там, правда, рекомендуют для всех объявленных прототипов функций ещё написать обёртки, но это мне пока рано делать.

Вообще, оно у меня всё равно падает с ошибкой линковки, но это скорее потому, что я неправильно описал принимаемые типы libc. И ещё не может обнаружить путь к самой библиотеке. В процессе решения проблемы.