Каковы разные способы указания пути связывания с библиотеками FFI в Rust? - PullRequest
0 голосов
/ 31 мая 2018

Используя приведенный ниже код в качестве примера:

extern crate libc;

#[link(name = "adder")]
extern {
    fn double_input(input: libc::c_int) -> libc::c_int;
}

fn main() {
    let input = 4;
    let output = unsafe { double_input(input) };
    println!("{} * 2 = {}", input, output);
}

Должен ли #[link(name = "adder")] содержать относительный путь к файлам .o / a / .h ?Например, должно ли это быть #[link(name = "../adderlib/adder")]?Есть ли другой способ сообщить компилятору, где находится adder

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Ответ на первый вопрос - ДА!Если ваш lib файл libfoo.o, в вашем коде достаточно #[link(name = "foo").Более подробная информация содержится в официальной документации .

. Она будет относиться к файлу lib, расположенному в текущем рабочем пути, и к системному пути lib.(Я не могу найти это ни в одной документации, но однажды сделал это успешно).Вы можете указать путь, используя rustc -l XX -L XX.Использование Cargo с сценарием сборки - лучший способ.

0 голосов
/ 31 мая 2018

Если вам нужно контролировать, как библиотека найдена или связана с вашим кодом Rust, вы должны сделать это с помощью сценария сборки .

...