История изменений
Исправление NIR, (текущая версия) :
Из того, что я выяснил:
- Необходимо добавить:
#![crate_type = "cdylib"]
extern crate libc;
use libc::{нужные типы данных};
...в lib.rs библиотеки. Возможно libc необязательна, но можно будет сделать принимаемые функциями параметры вполне себе соответствующими сишным.
- В Cargo.toml прописываем:
[dependencies]
libc = "0.2"
#[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. И ещё не может обнаружить путь к самой библиотеке. В процессе решения проблемы.