Атрибут link
Атрибут link применяется к блокам extern и сообщает
компилятору, что для работы программы необходимо скомпоновать
нативную библиотеку. Параметром атрибут принимает строку с именем
библиотеки, а также может принимать дополнительные параметры,
например kind для указания типа библиотеки. Этот атрибут
используется в небезопасном коде при взаимодействии с внешними
библиотеками на C или других языках.
Синтаксис
#[link(name = "library_name")]
#[link(name = "library_name", kind = "static")]
#[link(name = "library_name", kind = "dylib")]
Пример
Давайте объявим внешнюю функцию из библиотеки "m"
и укажем компоновщику подключить её через атрибут link:
#[link(name = "m")]
extern "C"
{
fn sqrt(x: f64) -> f64;
}
fn main()
{
let res = unsafe { sqrt(16.0) };
println!("{}", res);
}
Результат выполнения кода:
4
Пример
Давайте укажем статический тип библиотеки через параметр
kind:
#[link(name = "m", kind = "dylib")]
extern "C"
{
fn cos(x: f64) -> f64;
}
fn main()
{
let res = unsafe { cos(0.0) };
println!("{}", res);
}
Результат выполнения кода:
1
Смотрите также
-
ключевое слово
extern "C",
которое объявляет внешние функции в стиле C -
ключевое слово
unsafe,
которое позволяет выполнять небезопасные операции -
атрибут
no_mangle,
который отключает искажение имён функций -
атрибут
repr(C),
который задаёт C-совместимое представление структур