Как обернуть существующие функции C с помощью Rust или как вызвать функции C из Rust? - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть существующий код C и его заголовок, и мне нужно вызвать код C из Rust. Я пробовал это много раз и ссылался на документы, но я не понимал, как применить это к моему коду. Я сталкиваюсь с трудностями при преобразовании функций C в Rust. Пожалуйста, помогите мне с некоторыми примерами, чтобы я мог легко понять.

Я пытался использовать примеры, приведенные в книге Rust и других примерах веб-сайта, но ни один ресурс не имеет более подробной информации об этом.

C_code.h

void ifx_vec_init_r(ifx_Vector_R_t* vector,
                    ifx_Float_t* d,
                    uint32_t length);

void ifx_vec_init_c(ifx_Vector_C_t* vector,
                    ifx_Complex_t* d,
                    uint32_t length);

void ifx_vec_rawview_r(ifx_Vector_R_t* vector,
                       ifx_Float_t* d,
                       uint32_t length,
                       uint32_t stride);

void ifx_vec_sub_r(const ifx_Vector_R_t* v1,
                   const ifx_Vector_R_t* v2,
                   ifx_Vector_R_t* result);

Я хочу вызвать все перечисленные выше функции в Rust, но я не могу понять, как запустить или как изменить. Что и все мы должны заботиться, чтобы обернуть этот код C? Какие способы доступны?

1 Ответ

0 голосов
/ 06 ноября 2019

Если вы пытаетесь вызвать код на C из Rust, вам нужно создать привязки FFI, как некоторые люди упоминали в комментариях.

Однако обычно лучше сделать это через rust-bindgen, который автоматически генерирует привязки и включает в себя тесты, чтобы убедиться, что результаты имеют правильный размер, выровнены и т. Д. Очень легко создать тип с неправильным размером, который не даст вам предупреждения при компиляции. время и может вызвать неопределенное поведение, если вы не сгенерируете для них тесты с bindgen.

...